2013-05-28 108 views
2

我想创建一个测试用例来监视多个并行异步服务器任务的进度。我有代码排序工作,但有几件我不明白。首先,下面的$ .ajax调用返回什么?从理论上讲,它应该返回未定义,但似乎并非如此。异步AJAX调用返回什么?

function doParallel() {  
    var promiseA, promiseB, handleSuccess, handleFailure; 
    var dataA = JSON.stringify({ size: a }); 
    var dataB = JSON.stringify({ size: b }); 

    promiseA = $.ajax({ 
     url: testGlobal.urlA, 
     data: dataA, 
     type: "POST", 
     async: true, 
     contentType: 'application/json; charset=utf-8', 
     dataType: "json", 
     success: function (rtnData) { 
      // Get the result 
      result = (rtnData === undefined) ? null : $.parseJSON(rtnData.d); 
     }, 
     error: function (xhr, textStatus, errorThrown) { 
      // Whoops! didn't work 
      reportAjaxError(xhr, textStatus, url, data); 
     }, 
     complete: function (xhr, textStatus) { 
      // Errors have already been handled, so only 
      // deal with success cases 
     } 
    }); <--- WHAT GETS RETURNED TO PROMISE HERE? 

... (same code for promiseB, etc. 
    var notifyingPromiseA = intervalPromise(2000, 'a'); 
    var notifyingPromiseB = intervalPromise(2000, 'b'); 

... 
    promiseA.done(function() { 
     log("A done"); 
    } 
    promiseB.done(function() { 
     log("B done"); 
    } 
    $.when(promiseA, promiseB).done(function() { log ("All done") }); 
} 

function intervalPromise(millis, source) { 
    var deferred = $.Deferred(); 
    //checkProgress(); 
    log("Checking progress on " + source); 
    var id = setInterval(function() { 
     deferred.notify(); 
     if (testGlobal.aDone && testGlobal.bDone) { 
      clearInterval(id); 
      deferred.resolve(); 
     } 
    }, millis); 
    return deferred.promise(); 
} 

...

回答

0

嗯..官方文件说:

的$阿贾克斯()函数返回的XMLHttpRequest对象,它 创建。通常,jQuery在内部处理此对象的创建,但用于制造一个对象的自定义函数可以是使用xhr选项指定的 。返回的对象通常可以丢弃 ,但确实提供了观察的较低级别界面,并且操作请求的操作是 。特别是,调用 对象上的.abort()将在请求完成之前暂停该请求。

http://api.jquery.com/jQuery.ajax/

0

在jQuery 1.5,jQuery.ajax()(以及各种AJAX快捷方法)的返回jqXHR对象,它是在浏览器的本地XMLHttpRequest对象的超集,并实现尤其无极接口。

了解更多关于jqXHR对象here