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

use*_*143 7 jquery deferred

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

如果一切都成功.done()执行,并且任何一个url .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);
});
Run Code Online (Sandbox Code Playgroud)

gue*_*314 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)
        })
    })
});
Run Code Online (Sandbox Code Playgroud)

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