微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

$.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,highlightsData);
    })
    .fail(function(data,textStatus,jqXHR) {
        console.error('Got error in '+jqXHR);
});

解决方法

尝试
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,jqxhr) {
            console.log(data,jqxhr);
            printData(data)
        }
        // `error`,function (jqxhr,errorThrown) {
            console.log(jqxhr,errorThrown)
        })
    })
});

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

原文地址:https://www.jb51.cc/jquery/177299.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐