2013-10-01 114 views
0

這是什麼困擾我。我的代碼在document.ready上運行。我需要請求是異步的,也就是說async: trueAjax異步響應不加載到div

for (var i = 0; i < totalGraphs; i++) { 
    var kpiId = kpiIds[i]; 
    jQuery.ajax({ 
     type: 'POST', 
     url: graphUrl, 
     data: "kpiId="+kpiId+"&divId="+(i+1), 
     async: true, //if false things are working fine 
     cache:false, 
     success: function(response){ 
      document.getDocumentById("graph" + (i + 1)).innerHTML("hello"); 
     }, 
     error:function(XMLHttpRequest, textStatus, errorThrown) { 
     } 
    }); 
} 

該請求不把你好我graphX div但每當我把async: false東西都工作正常。我真的需要這個請求是異步的。

在此先感謝您的幫助。

+0

'不會在我的graphX divs中輸入hello,或只放入最後一個div? –

+0

'totalGraphs'的價值是什麼?我想如果你很快發送很多請求,服務器可能會阻止對你的任何響應。 –

+0

'data'應該是一個對象,而不是一個字符串。 – Archer

回答

4

嘗試......

for (var i = 0; i < totalGraphs; i++){ 
    (function ajaxCall(index) { 
     var kpiId = kpiIds[index]; 
     jQuery.ajax({ 
      type: "POST", 
      url: graphUrl, 
      data: { 
       kpiId : kpiId, 
       divId : index + 1 
      }, 
      async: true, //if false things are working fine 
      cache: false, 
      success: function(response) { 
       document.getDocumentById("graph" + (index + 1)).innerHTML("hello"); 
      }, 
      error: function(XMLHttpRequest,textStatus,errorThrown) {} 
     }); 
    })(i); 
} 

我裹在Ajax調用的匿名函數,這樣的i值永遠不會改變,相對於Ajax調用。

+0

嘿它的工作,但爲什麼它的工作?我會接受這個作爲回答 –

+1

我已經做了一些細微的改變,這將有助於更好地解釋(我覺得這個概念很難說)。在循環內部,我創建了一個立即調用的函數,將'i'作爲參數'index'傳入。然後該參數在該函數中用於代替'i'。由於'index'的值是一個局部變量,它永遠不會改變。 ** [這看起來像是對匿名函數的一個很好的解釋](http://markdalgleish.com/2011/03/self-executing-anonymous-functions/)** - 閱讀一下,看看它是否有助於解釋: ) – Archer

4

我猜在返回成功時,i計數會混入循環中。 success將在循環運行後返回,因此這會產生意想不到的結果。

你可以返回去了在data發送您的response然後在getDocumentById方法使用的i價值?我猜這會解決你的問題。

新的代碼嘗試:

所有的
for(var i=0;i<totalGraphs;i++){ 
    jQuery.ajax({ 
     type: 'POST', 
     url: graphUrl, 
     data: { kpiId: kpiIds[i], divId: (i+1) }, 
     async: true, //if false things are working fine 
     cache:false, 
     success: function(response){ 
      document.getDocumentById("graph" + response.count).innerHTML("hello"); 
     }, 
     error:function(XMLHttpRequest,textStatus,errorThrown){} 
    }); 
} 
+0

提出解決方案。 –

1

首先,你正在運行一個循環中調用Ajax。如果您關閉了異步,這樣可以。但是,既然你打開了異步,循環不會等待ajax完成它的工作。

最好的辦法是使用內部循環ajax將值傳遞給全局變量,然後使用該變量稍後繪製圖形。

+0

採伐權,會嘗試謝謝btw –