2011-10-14 143 views
0

我有一個for循環中,我想提出一個Ajax調用它給出了一些迴應同步Ajax調用

for (var i in my_array) 
{ 
    ajax_call() 
} 

我多次射擊Ajax請求有時Ajax響應是不是在Ajax請求的順序。我想按照請求的順序得到迴應。
有什麼辦法可以實現這一點,而不會給應用程序增加任何延遲?

回答

2

而是一個循環,你可以使用一個遞歸函數:

function sendAjax(myArray, index) { 
    $.ajax({ 
     url: '/someurl', 
     type: 'POST', 
     data: { id: myArray[index].id }, 
     success: function(result) { 
      // TODO: do something with the result of the AJAX call 

      if (index < myArray.length) { 
       // proceed with the next call if we still have 
       // elements in the array to process 
       sendAjax(myArray, index++); 
      } 
     } 
    }); 
} 

,然後觸發:

sendAjax(my_array, 0); 

這種方式是保證的反應將僅僅因爲沒有其他的請求而按照請求的順序到達在第一次完成之前。

這就是說,發送多個這樣的AJAX請求不是一個好主意。您應儘可能限制網絡連接。最好發送一個包含所有數組數據的大AJAX請求,而不是針對數組中的每個元素髮出多個較小的AJAX請求。

+0

聽起來不錯,讓我試試。當我們每次都在等待迴應時,會不會影響績效? – xyz

+0

@Ajinkya,AJAX是異步的,因此瀏覽器在執行這些請求時不會凍結,用戶仍然可以使用站點的其他部分。如果您想同步這些請求並以與發送請求相同的順序接收響應,您也沒有多少選擇。 –

+0

相信:)謝謝你.. – xyz

0

如果您使用jQuery ajax,則可以使用異步。通過這種方式,在AJAX調用完成之前JavaScript會「暫停」。

$.ajax({ 
    url: "test.html", 
    context: document.body, 
    async: false, 
    success: function(){ 
    // do something here 
    } 
}); 

DOC:http://api.jquery.com/jQuery.ajax/

+0

感謝您的建議。但是我正在開發一個遺留應用程序,並且不認爲他們會允許我爲一件事添加Jquery。 – xyz