2012-06-22 109 views
1

我正在處理一些本地json文件,但我在加載速度方面遇到了一些問題。我的服務器只是一個用python製作的小型網絡服務器,我通常用它來嘗試我的javascript代碼。 我的腳本只適用於Firefox,我必須延遲60000毫秒(或使用螢火蟲)。 腳本是:加速json加載

function geisson() 
{ 
var iabile = new XMLHttpRequest(); 

iabile.open("GET", "longanocard.json", true); 
iabile.send(null); 


PerdiTempo(60000); 

var objectjson = {}; 
var arrayCards= []; //creazione dell'array che conterrà le cards 


objectson = JSON.parse(iabile.responseText); 

arrayCards = objectson.cards; 
//alert(arrayCards[0].__guid__.toSource()); 


var qwerty = arrayCards[0].__guid__; 

var mela = "http://www.airpim.com/png/public/card/" + qwerty + "?width=292";  


document.location = mela; 
//windows.location.href= mela; 
} 

PerdiTempo是我使用了延時功能:

function PerdiTempo(ms) 
{ 
ms += new Date().getTime(); 
while (new Date() < ms){} 
} 

我如何可以加快文件longanocard.json的負荷?爲什麼延遲不適用於其他瀏覽器?

+2

等待響應這種方式是可怕的。你應該使用回調函數,在'onreadystatechange'事件中檢查響應狀態 – fcalderan

+0

你永遠不應該使用這樣的循環來編寫延遲,因爲瀏覽器在JS代碼完成之前不會重新繪製,所以從用戶的角度來看,瀏覽器將會已鎖定。 – nnnnnn

回答

2

你真的應該避免等待以這種方式異步響應(你怎麼知道多少秒究竟是如何延緩JSON解析?),而是使用了onreadystatechange事件您的要求

function geisson() { 

    var iabile = new XMLHttpRequest(); 

    iabile.onreadystatechange = function(){ 
     if(iabile.readyState === 4 && iabile.status === 200) { 
      var objectjson = {}; 
      var arrayCards= []; //creazione dell'array che conterrà le cards 
      objectson = JSON.parse(iabile.responseText); 

      ... 
      /* codice restante qui */ 

     } 
    } 
    iabile.open("GET", "longanocard.json", true); 
    iabile.send(null); 

}