AJAX 部分不会立即发生;发生alert
在 AJAX 回调有时间为items
.
从 jQuery 1.5 开始,$.ajax
返回一个实现 Promises 接口的对象。因此,您可以在.done
需要确保在执行代码之前已解决承诺的任何时候调用该方法:
var promise = $.ajax({/*...*/});
promise.done(function(data){
// Only works if the promise is resolved
});
例如,假设我们直接创建了一个延迟对象:
var promise = $.Deferred();
然后我们告诉它不要在五秒钟后解决:
setTimeout(function(){
promise.resolve("Foo");
}, 5000);
但随后我们绑定了一个处理程序来响应对document
对象的点击:
$(document).on("click", function () {
promise.done(function(data){
alert("Data is " + data);
});
});
请注意,我们将警报放在匿名函数中,并仅在promise 解决后将其传递promise.done
给执行。
这会建立一个队列,直到该承诺得到解决。如果我在前五秒钟内点击四次,什么都不会发生,但是一旦该承诺解决,我将看到四个警报框一个接一个地出现。
现在承诺已经解决,任何进一步的点击(等待 5 秒后)都会立即采取行动。
演示:http: //jsfiddle.net/w7swE/1/