1

我需要进行许多 JQUERY AJAX 调用,但我不想不断重复 AJAX 调用代码。因此,我尝试按如下方式设置 AJAX 函数:

function ajaxCall(ajaxData) {
    $.post('scripts/ajax/connect.ajax.php', {
        ajaxData
    }, function(ajaxReturn) {
        if (ajaxReturn == 'deadSession') {
            location.reload();
        } else {
            return ajaxReturn;
        }
    });
}​

但是,由于 AJAX 调用中的 {ajaxData} 变量,上述代码不起作用。以下代码确实有效:

function ajaxCall(ajaxData) {
    $.post('scripts/ajax/connect.ajax.php', {
        'googleMetaSave': '1'
    }, function(ajaxReturn) {
        if (ajaxReturn == 'deadSession') {
            location.reload();
        } else {
            return ajaxReturn;
        }
    });
}​

关于如何在 AJAX 调用中使用根据需要设置然后传递给此函数的变量是否有任何建议。

4

2 回答 2

0

删除 ajaxData 周围的 {}:

   function ajaxCall(ajaxData) {
    $.post('scripts/ajax/connect.ajax.php', ajaxData, function(ajaxReturn) {if(ajaxReturn == 'deadSession') {location.reload();}else{return ajaxReturn;}});           

}
于 2012-05-26T08:45:57.993 回答
0

jQuery POST方法的第二个参数应该是表示一系列键/值对的字符串,以 分隔&,或者它必须是包含一系列键值对的映射。

由于 JavaScript 的松散类型特性,这不会对您的函数产生巨大影响。

由于变量 ajaxData 表示传递给服务器的对象,因此您不需要{}围绕它的额外内容,因为如果您正在传递一个对象,这是多余的,如果您正在传递一个字符串,则语法不正确。

首先,让我们解决回调函数中的逻辑问题。由于 AJAX 是异步的,因此您的函数将在回调函数触发之前完成它的执行。相反,您的return ajaxReturn语句向回调函数本身返回一个值,这意味着数据无处可去。

为了将数据传送到可以处理的地方,您的回调必须将该数据作为切换传递给另一个函数。我已经修改了您的代码,既删除了{ }ajaxReturn 参数周围不必要的、不正确的,也删除了 return 语句。

function ajaxCall(ajaxData) {
    $.post('scripts/ajax/connect.ajax.php', 
        ajaxData   /* you don't need {} here */
    , function(ajaxReturn) {
        if (ajaxReturn == 'deadSession') {
            location.reload();
        } else {
            // return ajaxReturn;

            // hand the data off to a processing function
            processData(ajaxReturn);   
        }
    });
}​

function processData(data) {
    // do stuff with the data here
}

要调用您的函数并进行成功的后调用,查看如何创建表示参数的字符串/对象的示例会很有帮助:

// put the data in an object. {} are needed here.
var myData = { 'googleMetaSave' : '1' };

// make a call to fire the ajax post request
ajaxCall( myData );
// execution stops here, as your callback will handoff the response
 // to your processData function.

或者,您可以像这样表示 POST 数据,而不是 JavaScript 对象:

// represent data as a query string instead of object
var myData = 'googleMetaSave=1';

// send the data to the post function. 
ajaxCall( myData );
于 2012-05-26T09:07:14.770 回答