2016-09-21 3 views
2

.each()を使用してJSONファイルを繰り返しています。私のページに3秒間のデータを表示し、3秒間停止してから次のページに移動して繰り返します。私はこのコードを持っている:

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

        });  

      }); 

私は、これはそれを行うだろうと思ったが、3秒間、こののみ待機した後、連続してデータの各ビットを表示し、私は彼らが離れて3秒にする必要があります。

どうすれば入手できますか?ありがとう!

EDIT:ok、このコードでは var num = 0;

   $.getJSON(url,function(json1){ 

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

         setTimeout(function() { 

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

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



      }); 

は、しかし、これは、データを表示するためのsetInterval(FUNC、3000)を使用する他の要素に遅れて約半分秒です。なぜ、それを修正することができますか?私は本当に興味があります。インデックスで

答えて

2

タイムズ: -

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

これは第一にも待ちたい0秒、2回目、3秒、3位6秒、など

またはそれ第一を行いますsetTimeoutメソッドがブロックされていないため、

3000 * (num+1) 
+0

なぜこの種のことは遅くなりますか?それは本当にすぐに開始されません、それは約2番目の遅れです。それはsetInterval(f、3000)で消える他のものがあり、同期していないので問題です。 – Dionysus

1

これがあるので、各ループは3秒後に、彼らはすべての火を、すべてのタイムアウトを宣言して飛んで:使用。代わりに、setTimeoutsを連鎖させて、それらをほぼ再帰的に呼び出すことができます。各setTimeoutの中で、次のsetTimeoutを呼び出すと、各ループの代わりに次のデータ要素を渡します(アイテムにインデックスを持たせるために、ある種のカウンタが増分されている必要があるので、増分してsetTimeoutでチェックします)。 。そうすると、次のsetTimeoutは前回の完了まで宣言されません。

私は実際にちょうど最近のような配列からテキストを示す5秒ごとに変更するよう警告バーを設定する何かでした:インデックスnumbを想定し

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); 
1
var count = 0; 

$.each(mydata, function(data){ 
count++; 
setTimeout(function() { 
         console.log(data); 
        },3000 * count); 
}) 
0

が数値である:

$.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); 
}); 
関連する問題