我遇到了jQuery的问题,通过JSOND调用远程数据。我想在数据集中的数组中的每个项之间暂停执行;我想下拉数据然后在每个项目之间暂停3秒钟,这样我就可以在隐藏它之前显示每个项目并继续下一个项目。
这是我正在努力实现的简化版本:
$.getJSON(someURL,function(data) {
$.each(data.items,function(index,item) {
setTimeout(function() { alert('found one!'); },3000);
});
});
我遇到的问题是代码仅在3秒后运行setTimeout(),然后为集合中的每个项触发alert()对话框。因此,它在视觉上如此快速地穿过物品,只有最后一个物品可见。
有人可以指出我的错误在哪里吗?非常感谢! :)
答案 0 :(得分:3)
问题是每个循环都在几毫秒内发生,所以基本上所有的setTimeouts总共相差1-2毫秒。
尝试乘以索引
setTimeout(function() { alert('found one!'); },3000 * index);
答案 1 :(得分:0)
每次触发后,每个setTimeout都会触发3秒,而不是按顺序触发。如果您希望它们按顺序出现,则需要在每次迭代data.items时增加该超时,或者在每次迭代后触发下一个超时。这是一个简单的重新工作。
$.getJSON(someURL,function(data) {
var delay = 0;
$.each(data.items,function(index,item) {
setTimeout(function() { alert('found one!'); }, delay += 3000);
});
});
当然警报会等待用户解雇它们,所以这个例子看起来仍然很奇怪,因为警报会每隔3秒钟就会消失......
答案 2 :(得分:0)
这种方式警告第一项,等待3秒,提醒第二项,等待3秒等。
$.getJSON(someURL,function(json){
function doSomething(data){
if(data.length>0){
var curItem=data[0];
alert('item: '+data[0]);
setTimeout(function(){
doSomething(data.splice(1));
},3000);
}
}
doSomething(json.items);
});