我正在加载JSON文件并对结果执行$.each
。但是,我希望在处理JSON数据中的每个项目之间有一段延迟。我有以下代码,但它等待1000毫秒,然后一次输出所有item.time
值。
$.getJSON("data/data.json", function() {
}).done(function(d) {
console.log("Got JSON");
$d.each(function(i, item){
setTimeout( function(){
series.append(item.time, item.value);
console.log(item.time)}, 1000)
});
});
答案 0 :(得分:3)
尝试以下操作 - 对结构的某些部分进行了一些更改。
不幸的是,由于没有任何数据集,没有测试它。
$.getJSON( "data/data.json", function() {
console.log( "success" );
}).done(function(data) {
$.each( data, function( i, item ) {
setTimeout(function () {
series.append(item.time, item.value);
console.log(item.time)
}, i * 1000);
});
})
添加索引元素以随着每个元素的增加而增加,因为延迟需要按时间顺序增长。
示例:强>
假设您有10个数据集,现在使用$.each
函数,您可以遍历这些数据并将正确的元素附加到DOM(简单...)。
现在,如果你想在每个元素之间添加一个暂停,以便加载第一个元素,然后在1秒后加载下一个元素,则不能使用静态 1000ms 延迟。您需要在数据集下降时增加数量。否则,它只会等待 1000ms ,然后同时显示所有内容。
要将它们分隔开,并在$.each
函数中,您将索引作为可以使用的回调。如此简单的实现只是时间(*)超时因此它以 1000ms 开始,然后下一个将 2000ms (但距离第一个只有一秒钟的延迟)元素)。
答案 1 :(得分:0)
将您的通话更改为setTimeout:
setTimeout( function(){
series.append(item.time, item.value);
console.log(item.time)}, i * 1000)
同时调用所有setTimeout(在循环中),从现在起它们都会触发执行到1000。要将它们分开,只需将延迟乘以索引 - > 1000 *我,你会得到理想的结果。