2011-11-30 102 views
1

我在.each()函數的末尾有以下代碼,循環近50次。暫停jQuery ajax腳本,直到腳本成功返回

$.ajax({ 
    type: "POST", 
    url: "/process.php", 
    data: "info="+info, 
    success: function(html){ 
     // $('#container').html(html);   
    } 
}); 

我怎麼能在每次迭代期間暫停腳本,以便它會等到每個AJAX職位是執行下一.each()之前成功?

我基本上試圖阻止ajax請求的排隊。

+0

你試圖阻止發出每個AJAX請求,直到後來的返回?出於什麼目的? – wrschneider

回答

1

不要使用顯式循環。將每個next-ajax調用移入前一個的success處理程序。或者queue the requests programmatically

var numRequests = 50; 

function nextAjax() 
{ 
    if (numRequests > 0) 
    { 
     $.ajax({ 
      // snip... 
      success: function (html) { 
       // $('#container').html(html); 
       nextAjax(); 
      }  
     }); 
    } 

    numRequests--; 
} 

nextAjax(); 
1

所有你需要做的就是添加一個async:false屬性。例如:

$.ajax({ 
    type: "POST", 
    url: "/process.php", 
    data: "info="+info, 
    async: false, 
    success: function(html){ 
     // $('#container').html(html);   
    } 
}); 

但是,您應該知道,這將基本上「凍結」頁面,直到完成所有AJAX調用。做出這樣的同步請求幾乎不是必需的,所以除非您在用戶體驗不重要的情況下進行某種內部使用,否則我強烈建議您嘗試使用異步方式來實現你在追求。

+1

請不要這樣做。這是UI掛起的一個重要原因。這已經討論了很多地方,包括這裏:http://stackoverflow.com/questions/5399080/can-this-be-done-without-synchronous-ajax –

+0

Eeeeeew,沒有。當請求正在進行時,這將以最骯髒,不必要的方式掛起瀏覽器。 –

+0

對於99.9%的caes我完全同意。因此,我立即編輯。 – maxedison

0

有回調函數啓動下一個請求。