2016-09-21 1 views
2

.each()를 사용하여 JSON 파일을 반복합니다. 내 페이지에 3 초 동안 데이터를 표시하고 3 초 동안 일시 중지 한 후 다음 페이지로 이동하여 반복하도록합니다. 이 코드가 :이 그것을하지만 3 초 동안이 유일한 대기를하고 다음 연속 데이터의 각 비트를 표시 것이라고 생각

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

        });  

      }); 

을, 그리고 나는 그들이 떨어져 삼초해야합니다.

어떻게받을 수 있습니까? 감사!

EDIT : 확인 코드이므로 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)을 사용하는 다른 요소보다 0.5 초 늦습니다. 왜 고칠 수 있습니까? 나는 정말로 관심이있다. 인덱스에 의해

답변

2

시간 : -이 1 0 초 2 삼초, 3 육초 등

를 만들 것입니다

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

는 또는 당신은 첫째도 대기 할 에서는 setTimeout이 차단되지 않기 때문에

3000 * (num+1) 
+0

왜 이런 종류의 늦은가? 그것은 실제로 시작되지 않습니다. 그것은 약 2 초 늦었습니다. setInterval (f, 3000)을 사용하여 다른 작업을 수행하고 동기화하지 않기 때문에 문제가 발생합니다. – Dionysus

1

이, 그래서 각 루프는 삼초 후 모두 불을 모든 시간 제한을 선언을 통해 파리와 : 사용 . 아마도 대신 setTimeouts를 연결하여 거의 재귀 적으로 호출 할 수 있습니다. 각 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); 
1
var count = 0; 

$.each(mydata, function(data){ 
count++; 
setTimeout(function() { 
         console.log(data); 
        },3000 * count); 
}) 
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); 
}); 
관련 문제