2012-06-22 2 views
1

Я работаю с некоторыми локальными файлами json, но у меня возникают проблемы с загрузкой. Мой сервер - это всего лишь небольшой веб-сервер, созданный с помощью python, и я обычно использую его для проверки кода javascript. Мой скрипт работает только с Firefox, и я должен поставить задержку в 60000 мс (или использовать firebug). Сценарий:Speed ​​up json loading

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); 

}