我的代码中有2个嵌套的AJAX请求。按下按钮时会触发它们。我正在使用Bootstrap的加载阶段将按钮的文本更改为“加载...”,而AJAX请求正在处理中。嵌套Ajax请求 - 执行顺序问题
问题是在内部AJAX请求完成之前按钮被重置。
我意料的是,外AJAX请求complete
回调将在其success
回调所有的代码已被执行后,才可以执行,但是这不是发生了什么。
代码的简化版本是这样的:
$('#button').on('click', function() {
$.ajax({
url: …,
type: 'post',
data: …,
dataType: 'json',
beforeSend: function() {
$('#button').button('loading');
},
complete: function() {
$('#button').button('reset');
},
success: function(json) {
if (json['error']) {
…
} else {
$.ajax({
url: …,
dataType: 'json',
success: function(json) {
for (var delayer = 1; delayer < 2000000000; delayer++) {}
…
},
error: …
});
}
},
error: …
});
});
我创建了任意拖延循环才能够更好地验证我的机器上的影响。它给了我大约2秒的延迟。该按钮几乎立即重置。
这是它应该如何工作,如果不是 - 我该如何解决它?
感谢您的快速响应!我已经尝试过这个解决方案,并且你是对的,但是在我的情况下它不起作用,因为如果第一个AJAX请求的PHP处理程序在JSON数组中发送错误,我还需要重置该按钮。 –
然后你需要修改你的代码。在你的'if(json ['error'])'语句的前半部分添加'$('#button')。button('reset');'并且希望能够解决你的问题。如果出现错误,它会重置该按钮,或者如果没有错误,则会在第二次AJAX请求后重置该按钮。 – bugfroggy
我试图设置一个小的超时复位功能,如果它有~50毫秒超时,由于某种原因按钮不会在50毫秒后重置,但在成功功能完成后得到重置,这是什么我想要,但没有更好的解决方案吗? –