2011-12-13 3 views
0

특정 순서로 진행되는 ajax 호출을 원합니다. 코드를 사용하여 더 자세히 설명하겠습니다. 나는 아약스를 만드는 중이Ajax 호출 순서

var feed_urls = [ 
         'URL_1', 
         'URL_2', 
         'URL_3', 
         ... 
         ... 

         'URL_N', 
         ]; 

그렇게

$.each(feed_urls,function(index,value){ 
         $.getJSON(value, function(data) { 
          $.each(data.feed.entry,function(i,val){ 
            LIST.push(val.content.src); 
          }); 
         }); 
       }); 

내가 직면하고 문제는 AJAX 호출이 비동기이기 때문에 LIST의 내용이 같은 순서로 항상 아니라고처럼 jQuery의 getJSON 방법을 사용하여 호출합니다. 이 문제를 해결할 여지가 있습니까? 거짓, 그것을 재 :

아약스 호출의 바람직한 순서는 URL_1URL_3 다음 등 비동기로 URL_N

답변

0

사용 ajaxSetup()까지 URL_2 다음에 할 것

$.ajaxSetup(
    { 
    data: "{}", 
    async false, 
..whatever else you need 
+2

이것은 부작용입니다 요청이 수행되는 동안 페이지에서 * 모든 * javascript를 동결합니다. –

+0

모든 콘텐츠가 실제로 아약스 호출을 통해로드되고 순서가 매우 중요하기 때문에 페이지 고정 중 문제가 될 것이라고 생각하지 않습니다. 내가 그것을 조사하자. – Gautam

2

간단한 해결책은 URL1이 완료된 후에 URL2에 대한 요청을 시작하는 것입니다.

function get(n,callback) { 
    if (n == feed_urls.length) callback(); 
    $.getJSON(feed_urls[n], function(data) { 
    $.each(data.feed.entry,function(i,val){ 
     LIST.push(val.content.src); 
    }); 
    get(n+1,callback); 
    }); 
} 

get(0,function(){ 
    // This is called when all lists have been loaded. 
    alert(LIST); 
}); 
+0

이것은 모든 요청이 끝날 때까지 결과로 아무 것도하지 않는 쪽 effext를 가지고 있습니다 :) 내가 게시 한 옵션에 비해 트레이드 오프입니다 - OP가 결정할 필요가 있습니다 :) - 멋진 옵션 BTW. –

+0

@ MarkSchultheiss : 귀하의 코드는 결과에도 아무런 영향을 미치지 않으십니까? 이 솔루션은 요청이 실행되는 동안 다른 작업을 수행 할 수있는 이점이 있습니다. 비동기입니다. – Bergi