2011-09-16 4 views
9

나는이 같은 코드가 있습니다jQuery.each 함수의 각 루프 사이에 지연을 만드는 방법은 무엇입니까?

$('li').each(function(){ 
    var data = $(this).text(); 
    requestFunction(data, function(status){ 
     if (status == 'OK') do stuff... 
    }); 
}); 

그래서, 난이 기능을 사용하여 사이에 약간의 지연 할 필요 "requestFunction을()". 내가 어떻게 할 수 있니? 희망, 이해가 감사합니다. 증가시

+2

아약스를 호출하고 있습니까? –

+0

예, Google지도 지오 코더 –

답변

26

에서는 setTimeout :

$('li').each(function(indexInArray){ 
    var data = $(this).text(); 
    setTimeout(function() { 
     requestFunction(data, function(status){ 
      if (status == 'OK') do stuff... 
     }); 
    }, indexInArray * 500); 
}); 

당신이이 요소를 루프, 우리가 지연되지 않을 경우 동시에 해고 제한 시간 또는 다른 모든 요청을 늘리려면, 만 우리의 500ms 시간 초과 후.

  • 시간 시작 : 0 MS
  • 먼저 요청 : 0 MS (* 0 500)
  • 번째 요청 : 500 MS (500 * 1)
  • 셋째 요청 : 1000 ms (500 * 2)
+0

어떤 배열입니까? 나는 "indexInArray"를 의미합니다. –

+0

오, 남자, 그냥 "each (function (* indexInArray *) {"이 코드 부분을 쓰는 것을 잊었습니다.] jQ.each 함수의 index'es에 대해 알고 있습니다. –

+0

@Ax, 예, 잘못 입력했습니다. 어떻게되는지 알려주세요. – Joe

2

만약 당신이 내에서 아약스 전화를 걸면 each 루프 다음 ​​ajax 요청을 syncronously 실행할 수 있습니다.

이렇게하려면 false으로 ajax 요청의 async 속성을 설정할 수 있습니다.

또는 requestFunction에 대한 콜백 기능을 조사하는 것이 좋습니다. 이렇게하면 메서드가 반환 된 후 코드를 실행할 수있게되어 시간 초과 등의 필요성을 무효화합니다.

콜백은 기본적으로 코드의 끝에서 실행되는 메서드입니다. 당신은 기본적으로 당신의 기능을 말합니다, 당신이 일을 마쳤을 때 당신이 전화하기를 바라는 또 다른 기능이 있습니다.

+0

이해가 안됩니다. –

+0

"requestFunction"소스를 읽을 수 없습니다. 나는 그것들 사이에 약간의 지연을 할 수있다. –

+0

왜 전화하는간에 지연이 필요합니까? 설명해주십시오. –

관련 문제