JQUERY AJAX调用 - 带变量的函数

时间:2012-05-26 08:43:28

标签: jquery ajax

我需要进行许多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调用中使用变量的建议,该变量是根据需要设置的,然后传递给此函数。

2 个答案:

答案 0 :(得分:0)

删除ajaxData周围的{}:

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

}

答案 1 :(得分: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 );