[英]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 函數可以返回true
或false
或1
或0
,並且假設是警報數據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.