2012-05-11 3 views
0

У меня есть странные проблемы с JS (вероятно, нуб ошибка), но я застрял с нимДоступ параметр в Javascript

В функции fillInVersionsList, если я ставлю alert("tempo") или перерыв в поджигатель, я может получить доступ к моим данным в параметре (то есть: alert(pSimulator.simulatorData['LastVersion']) и у меня есть правильный результат. Проблема в том, что если я не ставил брандмауэр/firebug перед своим доступом к данным, у меня ошибка JS pSimulator.simulatorData is undefined.

$(document).ready(function() { 

    var simulator = new Simulator(); 

    // Load SimulatorData into the simulator class 
    initSimulatorData(simulator); 
    // Fill in datas into VersionsList (2nd arg = Id of the list) 
    fillInVersionsList(simulator, $('#VersionsList')); 


}); 

function initSimulatorData(pSimulator) 
{ 
    $.ajax({ 
     url: "getData.php?action=init", 
     success: function(data) { 
      pSimulator.initSimulatorData(data); 
     } 

    }); 

} 


function fillInVersionsList(pSimulator, pSelect) 
{ 
    //alert("tempo"); 
    alert(pSimulator.simulatorData['LastVersion']); 

    pSelect.html('<option>test</option>')  

} 

function Simulator() 
{ 

    var simulatorData; 


    this.initSimulatorData = function(pSimulatorData) 
    { 
     this.simulatorData = pSimulatorData;  
    } 




} 

Есть что-то решить эту проблему?

Заранее спасибо

+0

как я вижу, функция вызывается, но что содержит 'pSimulator'? это может быть так, что в 'pSimulator' нет' simulatorData' – Joseph

ответ

0

Что выглядит с вашей проблемой является то, что тренажер занимает время для инициализации и когда fillInVersionsList называется pSimulator еще не полностью initalized.

Когда вы ставите предупреждение, он получает некоторую задержку времени, в течение которого симулятор инициализируется.

Проверить, есть ли какой-либо метод обратного вызова после полного инициализации тренажера, а затем вызвать метод fillInVersionsList.

какой-то initSimulatorData (симулятор)?? Есть ли какой-либо асинхронный код, который был в нем использован?

+0

Я отредактировал свой основной пост с отсутствующими функциями –

+0

Вы должны либо сделать синхронный вызов ajax, либо вызвать fillInVersionsList из sucess: funtion() {pSimulator.initSimulatorData (данные); // здесь вызов fillInVersionsList()} –

+0

Я добавил параметр «async: false» в мой запрос ajax, и теперь он работает, спасибо :) –

1

Я подозреваю, что initSimulatorData загружает некоторые данные асинхронно.

Добавление alert дает ему достаточно долго для загрузки данных.

Вам нужно будет добавить какую-то функцию обратного вызова, например:

initSimulatorData(simulator, function() { 
    // Fill in datas into VersionsList (2nd arg = Id of the list) 
    fillInVersionsList(simulator, $('#VersionsList')); 
}); 
+0

Да, подумайте, что это проблема, но успех: параметр $ .ajax не должен быть обратным вызовом? (я добавил недостающие функции, извините) –