2011-12-13 54 views
0

我希望正在製作的ajax調用按特定順序進行,讓我使用一些代碼進行進一步解釋。訂購Ajax調用

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

         'URL_N', 
         ]; 

我提出AJAX調用使用jQuery的getJSON方法,像這樣

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

我現在面臨的問題是,因爲Ajax調用是異步的LIST的內容並不總是以相同的順序。無論如何要解決這個問題嗎?

Ajax調用的優選順序將URL_1之後URL_2其次URL_3,並以此類推,直到URL_N

回答

0

使用ajaxSetup()與異步:假的,它重新:

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

這有副作用o f正在執行請求時在頁面上凍結* all * javascript。 –

+0

我不認爲凍結頁面會是一個問題,因爲所有內容都是通過ajax調用真正加載的,而排序非常重要。讓我檢查一下。 – 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

這有一個沒有做任何事情的結果,直到所有的請求都完成:)這是一個權衡與我發佈的選項相比 - OP將需要決定:) - 不錯的選擇順便說一句。 –

+0

@MarkSchultheiss:你的代碼不會對結果做任何事情嗎?該解決方案具有*能夠*在請求運行時執行其他工作 - 它是異步的。 – Bergi