[英]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.