2013-06-05 36 views
0
<div> 
    <span id="lbl" style="font-size: 20px; color: red"></span> 
</div> 

我寫了下面的Ajax調用,jQuery的Ajax調用在for循環中,沒有工作

for (var i = 0; i < 20; i++) { 
     $.ajax({ 
      type: "POST", 
      url: "WebForm1.aspx/CallMe", 
      data: "{req: '" + i + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json",     
      success: function (data) { 
       $("#lbl").append(" " + data.d);      
      } 
     }); 
    } 

在代碼隱藏設置如下斷點 - 被調用

enter image description here

CallMe方法在循環中二十次。第一次撥打電話時,我按F5,但客戶端中沒有獲得值,其他幾個F5命中,但客戶端上沒有返回值。

已經允許代碼隱藏代碼來執行5次,我obtain 4-5 values at once在客戶端..

我試着設置在jQuery.ajax,這並沒有幫助cache:false ..

任何建議將是非常很有幫助!

+0

調試器不能很好地向您展示多線程代碼中發生的事情。 $ .ajax調用中的每個請求都有自己的線程。當另一個線程遇到調試器斷點時,線程可能會繼續。我不知道。也許一個線程進入斷點而另一個線程停止調試器將斷開並等待你釋放另一個線程。也許點擊「恢復」重新啓動多個停止的線程。有時日誌/打印消息在多線程代碼中效果更好。 –

+0

線索(也許):一個瀏覽器通常只能有一定數量的打開的ajax調用,它可以一次發出。除此之外的任何數字(2-6)都將排隊等待另一個完成時發出。 –

回答

0

即使ajax請求同步發送,但響應可能不會按照發送的順序返回。我的猜測是你想模擬一個同步請求和響應,那麼一種方法就是將這些ajax調用嵌套在success塊中。

$.ajax{(
    data: 'req:1', 
    success: { 
     $.ajax{(
      data: 'req:2', 
      success: { 
       data: 'req:3', 
       ... 
      )} 
    )} 
)} 
+0

如果呼叫數量高達20,那麼爲少量呼叫嵌套就可以,但這種方法並不好,對嗎? – Abhijeet

+0

我沒有使用它,但似乎你可能想看看控制流框架。其中一個出現在我腦海裏的是異步的。 https://github.com/caolan/async –