我发现当我们的多个请求都成功时,它们会正常工作,但如果其中一个请求因任何原因失败,我的回调就不会被执行。我在jQuery文档中挖了一下,说
在传递多个Deferred对象的情况下 jQuery.when(),该方法从一个新的" master"返回Promise。 跟踪所有Deferred的聚合状态的延迟对象 它已经过去了。该方法将解析其主延迟为 所有Deferreds解决之后,或者拒绝主人Deferreds 其中一个延期被拒绝
这意味着如果我提交n
个请求并且它们都成功,则主对象将触发成功解析,并且将触发连接的回调(使用.then
或.done
)。但是,如果这些n
请求中的任何一个失败,那么主Promise将被拒绝,当其他子程序可能仍在工作时,我将调用failCallback。另外,除非我使用闭包,否则我无法在回调中访问这些子语句。
在jQuery中提交多个ajax请求的正确方法是什么,并且无论其中任何一个失败都有相同的行为?
答案 0 :(得分:0)
听起来你想要恢复成功,不管个别请求是否失败(假设你也会单独处理)所以,一个快速的建议,如果你已经考虑过这个,请原谅我,就是包装你的AJAX调用try {} catch {}块,以防止在when()中终端失败,如:
G123
并在ajax函数中添加如下内容: var ajax1 = function(){ 尝试{ $ .ajax(function(){ 成功:功能(res){//做东西} }); } catch(){ //什么也不做,我相信这会好的 } }
或者,另一种方法:
var ajax1 = function () { //do ajax stuff but return "success" on err
var ajax2 = function () { //do ajax stuff but return "success" on err
$.when(ajax1, ajax2).then(doMoreStuff);
这几乎是伪代码来演示这个概念,假设你可以填空。
希望它有所帮助!
回应你的评论。我想的是:
$.ajax(function () {
success: function(){},
error: function () {
//handle the error
return success;
});
我在原始示例中添加了try catch。
答案 1 :(得分:0)
我一开始并没有建议这样做,因为您似乎正在使用可以单独列出的promises / deferred,但是使用$ .apply()可能会起作用。这将“单独”运行数组中的所有项目。
type="number"
即使你遇到问题,也应该运行所有这些并运行.then()。