ajax之异步 AJAX 调用返回什么

kevingrace 阅读:41 2025-06-02 22:19:02 评论:0

我正在尝试创建一个测试用例来监控多个并行异步服务器任务的进度。我的代码可以正常工作,但有几处我不明白。首先,下面的 $.ajax 调用返回了什么?理论上,它应该返回 undefined,但事实并非如此。

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(); 
} 

...

请您参考如下方法:

$.ajax() 返回 XMLHttpRequest 对象。从 jQuery v1.5 开始,$.ajax() 还实现并返回一个 Promise/Deferred 接口(interface)。

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

http://api.jquery.com/category/deferred-object/

使用 Promise,您可以根据原始 ajax 调用的结果链接其他回调。

// setup interval / timer to update UI not finished / still working logic 
 
$.ajax().done(function() { 
    // clear UI not fninshed / still working logic 
}); 


标签:ajax
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号