2013-04-11 4 views
0

몇 밀리 초 동안 요청을 지연시키고 싶습니다.for 루프를 지연시키는 방법

내가 3 아약스 호출을하고있는 중이 야하는 JQuery와 루프의 loop.that 길이의 20 최대입니다 내부 때.

수단이 나는 문제가 없습니다 몇 seconds.In 크롬, 파이어 폭스, safary 오페라 거의 60 요청을하고있는 중이 야하지만 IE에서의 요청을 중단. 하나 하나 개의 아약스 요청을 가진

내 For 루프

for (index in personScoreCollection.collection) { 
     //Get the 4th and 5th score simultaniously. 
     $.when(UserSearch(index), UsabilityScore(index), UserConnection(index)).done(); 
    } 

모든 방법.

지연 또는 자바 스크립트를 사용하여 요청을 유지하는 방법 여기

image http://s24.postimg.org/q0zj3vwhg/Error_Message.jpg

요청을 중단하여 예 어떻게 오류를 볼 수 있습니다.

var keys = Object.keys(personScoreCollection.collection); 

(function next() { 
    if (keys.length) { 
     var index = keys.shift(); 
     $.when(UserSearch(index), 
       UsabilityScore(index), 
       UserConnection(index) 
     ).done(function(a, b, c) { 
        // process results 
     }, next); // recurse 
    } 
})(); // start loop immediately 

코드는 필요한 키의 배열을 만들고, 단지 다음 번에 그 배열에서 하나의 키를 이동 :

답변

1

당신은 AJAX의 다음 배치 호출을 트리거 할 .done 전화 자체를 사용한다 3 가지 AJAX 호출이 필요합니다. 세 번 모두 완료되면 다음 일괄 처리가 시작됩니다.

루프하려면 콜백을 각각 .done에 전달할 수있는 장점이 있습니다. 각 콜백은 차례로 호출됩니다. 이 두 콜백을 취소하면 현재 결과 집합이 처리되는 동안 실제로 다음 번 (비동기) 페치를 시작할 수 있습니다. .done 함수의 콜백이 호출되지 않습니다 때문에 AJAX 호출 중 하나가 실패 할 경우,이 루프가 중단됩니다

참고.

0

일부 작업을 지연 시키려면 setTimeout 함수를 사용할 수 있습니다. 예 :

var ms_pause = 50; // time between request in milliseconds 
var counter = 1; 

for (index in personScoreCollection.collection) { 
    //Get the 4th and 5th score simultaniously. 
    setTimeout((function(context_index){ 
     return function(){ 
      $.when(UserSearch(context_index), UsabilityScore(context_index), UserConnection(context_index)).done(); 
     } 
    })(index), ms_pause * counter); 
    counter += 1; 
}