如何通过ajax,最佳实践调用多个PHP函数?

时间:2012-01-24 18:55:15

标签: php javascript ajax javascript-events

我在多个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);

如果对我想要的东西更加困惑,请让我知道并澄清,

感谢

2 个答案:

答案 0 :(得分:1)

为什么不将PHP函数拆分为单独的较小脚本?它们代表您应用程序中的不同端点,不能一起调用,因此它们不应该在一起。

答案 1 :(得分:0)

您是否签出了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个,这些文件都具有非常相似的输出和所有这些。

干杯!快乐的编码