代码之家  ›  专栏  ›  技术社区  ›  b. e. hollenbeck

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

  •  2
  • b. e. hollenbeck  · 技术社区  · 16 年前

    我已经为jQuery的$.ajax()方法创建了一个包装函数,这样我就可以传递不同的数据类型和post变量,如下所示:

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

    我遇到的问题是把数据(总是JSON)取出来。我试过设定一个 var ret ret = data success: return data ? 或者是 success 需要回调函数来处理数据 return data ?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Leo user370469    16 年前

    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 调用synchronous,它会阻塞直到接收到数据,您可以将数据作为 你自己的功能。

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

        2
  •  1
  •   PetersenDidIt    16 年前

    调用$.ajax()时,它会创建请求,然后继续下一步。它不会坐等返回并阻塞下一行代码。这意味着除非success回调函数不能返回doPost函数的数据值。

    如果您真的想要一个包装器函数,那么您可以这样做:

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