jQuery $ .ajax成功必须是回调函数吗?

时间:2010-03-28 00:40:35

标签: javascript jquery ajax

我为jQuery的$ .ajax()方法创建了一个包装器函数,所以我可以传递不同的dataTypes和post变量 - 就像这样:

function doPost(dType, postData, uri){

    $.ajax({
        url: SITE_URL + uri,
        dataType: dType,
        data: postData,
        success: function(data){
          return data;
        });
}

我遇到的问题是将数据(总是JSON)退出。我尝试在$ .ajax()函数调用之前设置var ret并在success函数中将其设置为ret = data。我对此愚蠢吗?如果我没有设置成功函数,$ .ajax只会返回数据吗?或者只是success: return data?或success是否需要回调函数来处理数据,这可能只是return data

2 个答案:

答案 0 :(得分:1)

当你调用$ .ajax()时,它会创建请求,然后继续下一步。它不会坐下来等待返回并阻止下一行代码。这意味着除非成功回调函数无法返回doPost函数的数据值。

如果你真的想拥有一个包装函数,那么你可以这样做:

function doPost(dType, postData, uri, success){
    $.ajax({
        url: SITE_URL + uri,
        dataType: dType,
        data: postData,
        success: success
    });
}

当你调用doPost时定义你的成功处理程序,但是包装函数在这一点上对你来说确实没什么用。

答案 1 :(得分:1)

嗯,你在一个函数内 - 利用可变范围; - )

function doPost(dType, postData, uri) { 
    var result;
    $.ajax({ 
        url: SITE_URL + uri, 
        dataType: dType, 
        data: postData, 
        async: false,
        success: function(data){ 
          result = data;
        }); 
    return result;
} 

这实际上有效,但我想async部分是强制性的......否则$.ajax的调用会立即返回,而result仍然未定义 - 你会永远函数调用得到undefined

但是,当$.ajax调用同步时,它会一直阻塞,直到收到数据为止,您可以将数据作为自己函数的result返回。

但是你必须清楚,当使用这个方法时,在ajax加载完成之前不会执行任何其他代码!