我有一个 AJAX POST 函数。我想获得成功的回调然后执行一个函数。我选择使用 $.when
作为 follows 来实现此目的
var url = '/echo/html/';
var json_text = ' ';
var FireOrderCounter = 0;
$.when(
$.ajax({
type: 'POST',
url: url,
data: json_text,
success: function () {
FireOrderCounter++;
alert('successfully completed Action ' + FireOrderCounter);
var millisecondsToWait = 5000;
setTimeout(function() {
FireOrderCounter++;
alert('Done Spinnin ' + FireOrderCounter);
}, millisecondsToWait);
},
dataType: 'html'
})
).then(openWindow());
function openWindow() {
FireOrderCounter++;
alert('opened window' + FireOrderCounter );
}
success
回调在 openWindow()
之后触发。这是否意味着 $.ajax
没有被推迟,而 $.when
只是 assuming success如 API 中所述?
If a single argument is passed to jQuery.when and it is not a Deferred, it will be treated as a resolved
这是一个简化的测试用例。生产代码也同样失败。我必须触发此事件两次才能获取所有数据。存在竞争条件。
我可以插入一个断点来停止处理。当我仍然握住调试器时,函数就会触发。因此,它不等待成功回调。短暂超时(约 10 秒后发生)?我该如何解决这个问题?
最佳答案
我认为这是您的 then 语句:.then(function(){openWindow()});
或 .then(openWindow)
。如果你通过 () 传递,它将执行该函数。
关于jquery - 使用 $.ajax POST 实现 $.when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934774/