2010-07-09 22 views
3

我有一個頁面上有許多動作,它觸發$ .get,但我想一次運行一個,而不是一次觸發,這是很多加載時間..所以這對我來說有什麼解決方案?

好在你給出答案之前..我不想基於時間觸發,我想在每個請求完成後從ajax完成後觸發,然後繼續循環,以便在完成第一個操作後返回ajax。

回答

3

是否要執行同步請求?如果是這樣,你需要使用jQuery的ajax方法而不是get,設置async:false

檢查http://api.jquery.com/jQuery.ajax/

編輯

正如一位評論者指出的正確,使同步請求掛起javascript代碼具有唯一的線索。這意味着在等待請求完成時,沒有動畫或其他代碼正在運行。

一個有趣的選擇將是「鏈」您的要求,執行下一個請求前一個回調是這樣的:

$.get('ajax/first-call.html', function(data) { 

    $.get('ajax/second-call.html', function(data){ 
    //etc 
    } 
}); 
+1

請注意同步請求,因爲瀏覽器可能在請求正在進行時掛起。 – 2010-07-09 23:24:56

+0

你認爲隊列爲首選的隊列 – Basit 2010-07-10 15:59:13

1

聽起來你想要一個ajax隊列。我之前使用過this plugin,這很簡單。

2

您可以設置在jQuery的自定義的隊列。

http://api.jquery.com/queue/

  1. 所有要執行的功能填充您的隊列。
  2. 每個函數都是對$ .get()的單個調用。
  3. 在每個$ .get函數的回調中,調用dequeue()函數來啓動下一個ajax調用。
+0

很好的答案,但應該提到的是,需要在設置隊列之後調用'dequeue',而不是在$ .get回調函數之外發起第一個請求。此外,'queue'和'dequeue'函數需要應用於jQuery選擇器。我使用'$('body')。queue()' – Andy 2014-12-03 16:09:03

0

大多數瀏覽器只會一次請求同一個域的四個HTTP調用。其他人將排隊並連續執行。所以瀏覽器已經對這些請求實施了一些排隊。