2013-08-26 97 views
0

我不知道爲什麼,但我的Javascript速度非常慢,需要5分鐘才能正常完成,有時會刷新頁面,有些請求還沒有處理。Ajax請求極慢

我已經使用異步:真希望它會處理更快一點,但它不會。這裏是我用來保存#myspace裏面的每個元素的代碼。

cn = document.getElementById("myspace").childNodes; 
     for (var t = 0; t < cn.length; t++) { 
      if (cn[t].nodeType == 1) { 
       var n = { 
        id: cn[t].id, 
        left: cn[t].style.left, 
        top: cn[t].style.top 
       }; 
       $.ajax({ 
        data: n, 
        url: "/Application/Ajax/__ajaxProfile.php?a=SavePosition", 
        type: "post", 
        cache: true, 
        async: true, 
        success: function (e) {} 
       }) 
      } 
     } 
     e("Please wait for everything to save, it might take more than a minute."); 

     setInterval(function() { 

     if ($.active == 0) { 

      $('#close-modal').show(); 

     } 

     }, 10); 

任何人都知道爲什麼它被處理得如此緩慢,併爲此提供了一個體面的解決方案?

+0

你正在每10毫秒顯示你的'close-modal'。似乎有點過分。 –

+1

你是不是想要'setTimeout'而不是'setInterval'?這可能會阻止該線程。否則:#myspace有多少個子節點?服務器對請求的反應速度有多快(在開發人員工具中查看)? – RoryKoehein

+0

我這樣做是爲了在所有ajax請求完成時顯示它,即使沒有它處理非常慢。編輯:有更少的孩子節點,更快的過程,我不知道是否因爲我正在爲每個節點或任何其他請求。 – Denis

回答

3
var n_array=new Array(); 

for (var t = 0; t < cn.length; t++) { 
    if (cn[t].nodeType == 1) { 
     var n = { 
      id: cn[t].id, 
      left: cn[t].style.left, 
      top: cn[t].style.top 
     }; 
     n_array.push(n);  
    } 
} 

$.ajax({ 
    data: n_array, 
    url: "/Application/Ajax/__ajaxProfile.php?a=SavePosition", 
    type: "post", 
    cache: true, 
    success: function (e) {} 
}) 

應該是更快的方式,併產生更少的流量。 ofc你必須改變一點處理代碼...

+0

謝謝,現在就試試。 – Denis

+0

是的!這是我的解決方案。 – Denis