【问题标题】:jquery $.ajax() and its success callback - where is it returning to?jquery $.ajax() 及其成功回调 - 它返回到哪里?
【发布时间】:2010-11-02 17:47:23
【问题描述】:

jquery ajax 成功回调返回到哪里?


我编写了一个请求方法,它可以进行 ajax 调用,检测我是否提供了回调或返回响应 XML 的数据节点。

请求方法:

function request(request, dontRefresh)
{     
   var requestXML = composeRequestXML(request); 
   $.ajax({
      url: 'someProcessor.php',
      type: 'POST',
      cache: false,
      async: dontRefresh,
      timeout: 5000,
      data: "query="+requestXML,
      success: function(response)
      {
         //parses xml into a js object
         var responseObj = parseResponseXML(response);

         if(request.callback){
            request.callback(responseObj);
         } else {
            // responseObj.response[0].data[0] is the data 
            // node of the response Obj.
            // this is what i see being the problem - 
            // I DON'T KNOW WHERE THIS IS RETURNED TO!!
            return responseObj.response[0].data[0];
         }
      }
   });
}

此请求将使用回调

var requestObj = new Object();
    requestObj.callback = function(responseObj){someCallbackFunction(responseObj);};
    requestObj[0] = new Object();
    requestObj[0].module = "someModule";
    requestObj[0].action = "someModuleMethod";
request(requestObj);
//results are returned to the function someCallbackFunction()

这是我想要完成的一个例子

var requestObj = new Object();
    requestObj[0] = new Object();
    requestObj[0].module = "userManager";
    requestObj[0].action = "GET_USERID";

var userId = request(requestObj, false); //make the request asynchronous

我已经尝试返回 $.ajax() 函数本身......就像这样:

function request(request, dontRefresh){
   return $.ajax({/*...options...*/);
}

但这绕过了我开发的 xml 解析器并返回 XHR 对象。我想使用这种技术来注册变量。所以本质上...

我将在回调中使用此方法或使用它设置变量。

【问题讨论】:

    标签: javascript jquery ajax callback


    【解决方案1】:

    它被返回给 jquery,jquery 丢弃它。如果你想让你的代码在加载之前停止,请使用同步 ajax。但这会使页面在 ajax 请求完成之前没有响应,所以请不要这样做!

    同步ajax示例(不带jquery):

    var ajax=new XMLHttpRequest();
    ajax.open("GET", url, false);
    ajax.send(null);
    return ajax.responseText;
    

    注意:对于 IE 兼容性,这有点复杂,这只是一个概念证明。这就是 jquery 的做法:How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?

    【讨论】:

    • 嗯...实际上我已经这样做了(编辑问题以反映它)。
    • 你知道我有没有办法让这个请求函数返回ajax成功函数返回的内容?
    【解决方案2】:

    从您的角度来看,该函数不会返回到任何地方。返回值丢失。

    异步处理的关键是您在事件处理程序中处理与事件关联的任何数据,或者从那里传递它。

      /* ... */
      success: function(response)
      {
         //parses xml into a js object
         var responseObj = parseResponseXML(response);
    
         if(request.callback){
            request.callback(responseObj);
         } else {
            /* do something with the data */
            setUserId(responseObj.response[0].data[0]);
         }
      }
    

    setUserId() 是一个函数,只要用户 ID 可用,它就会执行一些有用的操作。

    顺便说一句,您可能不应该使用 responseObj.response[0].data[0] 而不首先确保该值确实存在。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多