将 setTimeout 合并到 jQuery .each 中
Incorporate setTimeout Into jQuery .each
以下代码从 URL 请求 json 数据。 获得该数据后,它会为 json 数据中的每个元素运行一个 .each 函数。 为了举例起见,我将 .each 函数简化为简单地使用 json 中的每个值执行 document.write,并在结束后提醒"已完成"。
如果我删除 setTimeout,那么代码将按预期工作,首先完成所有 .each 命令,然后发出警报。 但是,使用 setTimeout,它会在执行所有 .each 命令之前发出警报。
我让延迟本身完美运行,但是初始延迟后的代码会立即执行,而不是等待所有 .each 命令执行。 这是代码:
$.ajax({
type: "GET",
url: 'url to json data',
dataType: "json",
success: function(data) {
var time = 10;
$.each(data, function(key, val) {
setTimeout(function() {
document.write(val.term);
return;
}, time); time += 10;
});
alert('finished');
},
error: function () {}
})
如何在遍历 .each 命令时保持延迟,并且只有在遍历完所有 .each 命令时才发出警报"已完成"?
你可以做的是在这里使用 jQuery 的延迟。 使用承诺,然后在全部完成后调用回调。
未经测试,但您可以执行以下操作:
$.ajax({
type: "GET",
url: 'url to json data',
dataType: "json",
success: function(data) {
var time = 10,
timeouts = [];
$.each(data, function(key, val) {
var def = new $.Deferred;
timeouts.push(def);
setTimeout(function() {
console.log(val.term);
def.resolve();
}, time);
time += 10;
});
$.when.apply($, timeouts).done(function(){
alert('finished');
});
},
error: function () {}
})
您也可以将警报放在 setTimeout 中,但在每次迭代时重置它,以便它仅在each
成功完成时运行。
$.ajax({
type: "GET",
url: 'url to json data',
dataType: "json",
success: function(data) {
var time = 10;
var t=setTimeout(function(){alert('finished');} , 20);
$.each(data, function(key, val) {
setTimeout(function() {
//document.write(val.term);
clearTimeout(t);
t=setTimeout(function(){alert('finished');} , 20);
return;
}, time); time += 10;
});
},
error: function () {}
})
相关文章:
- jquery.each(第2行)添加背景色
- 如何使用jQuery each分离字符串中的元素
- Jquery.each数组推送不起作用
- 鉴于 for..在构造中,库提供的函数(如 jQuery.map() 或 _.each())有什么用
- jQuery each()没有'使用OOP方法是行不通的
- jQuery在.each中查找前面的元素标签
- jquery.each函数和传递变量
- Coffeescript jQuery each loop
- jQuery - setInterval with $.each
- Jquery.each,但仅限于当前元素
- jQuery数组参数和each()
- 如何将密钥与 JQuery $.each 循环中的字符串进行比较
- jquery .each 循环来执行每个数组项,它们之间有延迟
- 我是否错误地使用了jQuery .each函数
- .each jQuery 中的多个条件
- 使用$.each jquery创建ajax成功的html选择选项
- 跳出.each() jquery语句的最好方法是什么?
- 动态多级each() jQuery
- 从AJAX JSON响应中检索键,然后在.each() jquery中使用它
- 什么是'each'jQuery $.每一个循环