1

我有几个 ajax 调用,当它们成功时,我需要首先对所有响应进行相同的检查,然后,如果检查没有失败,则对响应执行不同的操作。

目前,我在每个调用中都使用success选项,并在每个调用中插入此检查,如下所示:

$.ajax({
    success: function (data){
        if (response_has_errors(data))
            {return}
        // do stuff 
    }
});

所以,我有这个想法:使用$(document).ajaxSucces()for 进行相同的检查,然后对每个调用使用$.ajax().done()or选项。success

但是我需要$(document).ajaxSucces()始终首先执行处理程序,如果它返回false,则不要执行单个处理程序。我怎么做?

4

2 回答 2

1

首先,当响应实际上是错误时,您应该确保服务器不返回成功状态(200 OK)。这为您的处理节省了一步。

然后你可以使用jQuerywhen()一起处理请求。

$.when(
    $.ajax(...), $.ajax(...), $.ajax(...), $.ajax(...)
)
.then(function () (result1, result2, result3, result4) {
    // all requests have successfully returned
})
.fail(function () {
    // handle error (inspect arguments)
})
.always(function () {
    // stop throbbers or other clean up work if necessary
});

如果您以前从未使用过 Deferreds,请务必彻底阅读有关 Deferreds 的文档。

请注意,您还可以使用apply().

$.when.apply($, allReqests).then( /* ... */ );
于 2013-06-24T07:33:52.330 回答
1

我可以建议使用 $.ajax() 中的“dataFilter”:http: //api.jquery.com/jQuery.ajax/

您可以在此 dataFilter 中进行一些错误处理,如果失败 - 直接在数据中更新某些标志,并让所有“成功”处理程序在执行之前检查该标志。

于 2013-06-24T07:37:33.813 回答