Javascript $。然后每个显示数据暂停3秒

Javascript $。然后每个显示数据暂停3秒,javascript,jquery,json,loops,timeout,Javascript,Jquery,Json,Loops,Timeout,我正在使用.each迭代一个JSON文件。我希望我的页面显示数据3秒钟,暂停3秒钟,然后转到下一个页面并重复。我有以下代码: $.getJSON(url,function(json1){ $.each(json1.data,function(numb){ setTimeout(function() { alert(json1.data[numb]

我正在使用.each迭代一个JSON文件。我希望我的页面显示数据3秒钟,暂停3秒钟,然后转到下一个页面并重复。我有以下代码:

    $.getJSON(url,function(json1){
                    $.each(json1.data,function(numb){
                        setTimeout(function() {
                            alert(json1.data[numb]["title"]);   
                        },3000);

                    });     

            });
我原以为这样就可以了,但这只需等待3秒钟,然后依次显示每一位数据,我需要它们相隔3秒钟

我怎么知道?谢谢

编辑:好的,使用以下代码: var num=0

                $.getJSON(url,function(json1){

                    $.each(json1.data,function(broj){

                        setTimeout(function() {

                            $(".bubble").text(json1.data[broj]["text"]);    

                        },6000*num);
                        num++;
                    });



            });
但这比使用setIntervalfunc 3000显示数据的其他元素晚了大约半秒。为什么?它能被修复吗?我真的很感兴趣。

索引时代:-

$.getJSONurl,函数JSON1{ $.eachjson1.data,functionnumb{ setTimeoutfunction{ alertjson1.data[numb][title]; },3000*num; }; }; 这将使前0秒,第2 3秒,第3 6秒等

如果您希望第一个也等待,请使用:

3000 * (num+1)

这是因为setTimeout没有阻塞,所以每个循环都会快速通过声明所有超时,然后3秒钟后它们都会触发。您可以将设置超时链接在一起,几乎是递归地调用它们。在每个setTimeout中,您将调用下一个setTimeout,并将其传递给下一个数据元素,而不是每个循环,可能仍然需要某种类型的计数器来递增,这样您就有了该项的索引。递增它并在setTimeout中执行边界检查。。这样,直到上一个setTimeout完成,才会声明下一个setTimeout

实际上,我最近刚做了一件事,设置了一个警报栏,每5秒更改一次,显示数组中的文本,如:

var speed = 5000;    /*this is the time in milliseconds adjust to suit*/

    function showAlert(x) {
        if (!x || x > (sysAlert.length - 1) || x < 0) x = 0;
        document.getElementById("alertBar").innerHTML = sysAlert[x];
        return setTimeout(showAlert, speed, ++x);
    }
    showAlert(0);
假设索引numb是数字:

$.getJSON(url,function(json1){

    var numb = 0; // starting point of array

    var iterate = function(){
        if(json1.data[numb]){ // only setTimeout if this index exists
            alert(json1.data[numb++]["title"]);
            setTimeout(iterate, 3000);
        }
    }

    // show the first result immediately
    iterate();

    // OR

    // show the first result 3000 milliseconds after the data is loaded
    // setTimeout(iterate, 3000);
});

为什么这种事情会发生得很晚?它并不是马上就开始,大约要晚一秒钟。这是一个问题,因为我有其他东西与setIntervalf,3000不同步。
$.getJSON(url,function(json1){

    var numb = 0; // starting point of array

    var iterate = function(){
        if(json1.data[numb]){ // only setTimeout if this index exists
            alert(json1.data[numb++]["title"]);
            setTimeout(iterate, 3000);
        }
    }

    // show the first result immediately
    iterate();

    // OR

    // show the first result 3000 milliseconds after the data is loaded
    // setTimeout(iterate, 3000);
});