簡體   English   中英

如何通過ajax調用多個PHP函數,最佳實踐?

[英]How to call multiple PHP functions through ajax, best practices?

我在多個 JavaScript 函數中有一些 ajax 調用。 每個人都做一個帖子/獲取一個functions.php文件

functions.php 有多個函數,應該與 JavaScript 中的函數相對應。

例如在js中我有:

function one() {
$.ajax({ 
    type: 'POST', 
    url: 'http://www.example.com/functions.php', 
    data: vals,
    dataType:'json',
    success: function (data) {
        alert(data);
    }
});
}

function two() {
$.ajax({ 
    type: 'POST', 
    url: 'http://www.example.com/functions.php', 
    data: othervals,
    dataType:'json',
    success: function (data) {
        alert(data);
    }
});
}

function three() {
$.ajax({ 
    type: 'GET', 
    url: 'http://www.example.com/functions.php',  
    data: { get_param: 'user' },
    dataType:'json',
    success: function (data) { 
        alert(data);
    }
        
});
}

在 PHP 中我有這樣的東西:

if (isset($_POST['city'])) {  // this comes from the javascript vals json object
$city = $_POST['city'];
   function one() {
    // do something

    return true;
   }
}

function two() {
 // do something
 return true;
}


if (isset($_GET['get_param']) && $_GET['get_param'] == 'user'){
function three() {
 // do something
return true;
}
}

也許 PHP 方面我寫它的方式有點混亂,但最后我希望function one處理 PHP 文件中的 corespondent 函數。 顯然,它們不需要具有相同的名稱。

PHP 函數可以返回truefalse10 ,並且假設是警報數據alert(data); .

如果對我想要的東西有更多的困惑,請告訴我,我會澄清的。

為什么不將 PHP 函數拆分為單獨的較小腳本? 它們代表應用程序中的不同端點,不能一起調用,因此它們不應該在一起。

您是否檢查過 REST 庫樣式。 看起來你基本上是這樣做的,但有點混亂。 當我說 REST 庫時,我並不是指純粹的 RESTful 庫,而是后端中的每個函數都可以通過 url 導航。

你這樣做的方式很好(只要函數數據不依賴於任何其他函數數據(因為它可能導致一些有趣的結果))。 做更多的寧靜方法要容易得多。 建立一個休息庫相當簡單。

我只是發現做整個 $_POST[...] 然后繼續做會隨着時間的推移變得很麻煩,並且變得越來越難以管理,因為總是需要一些新的變化,然后你最終會得到 100 個處理調用后端函數的方法。

MyApi = {    
    /**
     * The API Version
     */
    API_VERSION: "0.5",
    SITE_URL: "http//myurl.com/",
    /**
     * The API URL
     */
    apiURL: function(tokens) {
        return MyApi.SITE_URL + MyApi.API_VERSION + "/api/" + MyApi.apiTokenizer(tokens);
    },
    /**
     * The tokenizer for the API.
     */
    apiTokenizer: function(tokens) {
        var str = '';
        $.each(tokens, function(key, value) {
            str += value + "/";
        })
        return str;
    }
}

那就是用於生成新 api 鏈接的 javascript,然后你可以有類似的東西

function callBackend(tokens) {
    $.ajax({ 
        type: 'POST', 
        url: MyLibrary.apiURL(tokens),
        dataType:'json',
        success: function (data) {
            alert(data);
        }
    });
}

在您的后端,您需要一個像這樣的 .htaccess 文件

RewriteRule 0\.5/(.*) api/_MyApi.php?v=0\.5&state=$1 [QSA]

然后,您可以編寫一個后端 switch 語句,該語句將分解狀態(分隔符將是“/”),將您導航到結束時間庫調用。

<?php
    $state = MyParser::Parse($_REQUEST["state"]);
    $output = array();
    switch ($state) {
        case "case1":
            //do stuff
            break;
    }

    echo json_encode($output);
?>

這樣輸出總是以相同的方式處理。


就像一個注釋。 這是一個非常簡單且不完整的實現,但我發現它比 $_POST 更容易維護,它可以訪問 100 個不同文件中的 1 個,這些文件都有非常相似的輸出等等。

干杯! 快樂編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM