使用jQuery中的延迟对象处理多个ajax调用的不同成功和失败状态

时间:2014-11-27 12:46:39

标签: jquery deferred

$.when为同时查询的所有多个ajax调用返回Deferred对象。

如果一切都成功.done()执行,并且任何一个网址失败.fail()都会执行。

如何处理部分成功状态? (即)如果5个URL被传递给$.when,如果3个成功,我们需要处理成功状态而2个失败,我们需要处理失败状态。

$.when($.getJSON(headerUrl), $.getJSON(tasksUrl), $.getJSON(testingTrackerUrl), $.getJSON(highlightsUrl)))
    .then(function(headerData, tasksData,testingTrackerData,highlightsData) {
        printData(headerData, tasksData,testingTrackerData,highlightsData);
    })
    .fail(function(data, textStatus, jqXHR) {
        console.error('Got error in '+jqXHR);
});

1 个答案:

答案 0 :(得分:6)

尝试

var request = function (url) {
        return $.getJSON(url)
}
, requests = [
    headerUrl
    , tasksUrl
    , testingTrackerDataUrl
    , highlightsDataUrl
];
// return array of `resolved` , `rejected` jqxhr objects
$.when(
    $.map(requests, function (_request, i) {
         return request(_request)
    })
)
// do stuff with `resolved` , `rejected` jqxhr objects
.always(function (arr) {
    $.each(arr, function (key, value) {
        // `success`
        value.then(function (data, textStatus, jqxhr) {
            console.log(data, textStatus, jqxhr);
            printData(data)
        }
        // `error`
        , function (jqxhr, textStatus, errorThrown) {
            console.log(jqxhr, textStatus, errorThrown)
        })
    })
});

jsfiddle http://jsfiddle.net/guest271314/91Lomwr3/