0

JSに奇妙な問題(おそらくnoobのバグ)がありますが、それで立ち往生しています

関数では、FirebugにまたはブレークをfillInVersionsList入れた場合、パラメーターでデータにアクセスできます(つまり、正しい結果が得られます。問題は、アクセス前にアラート/Firebugブレークを入れなかった場合です。データに対して、JSエラーが発生しました 。alert("tempo")alert(pSimulator.simulatorData['LastVersion'])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;    
    }




}

この問題を解決するために何かありますか?

前もって感謝します

4

2 に答える 2

1

initSimulatorData一部のデータを非同期で読み込んでいると思われます。

を追加するalertと、データをロードするのに十分な長さになります。

ある種のコールバック関数を追加する必要があります。例:

initSimulatorData(simulator, function () {
    // Fill in datas into VersionsList (2nd arg = Id of the list)
    fillInVersionsList(simulator, $('#VersionsList'));  
});
于 2012-05-11T10:01:46.890 に答える
0

問題から、シミュレーターの初期化に時間がかかり、fillInVersionsListが呼び出されても、pSimulatorが完全に初期化されていないように見えます。

アラートを出すと、時間シミュレーターが初期化されるまでに時間遅延が発生します。

シミュレーターが完全に初期化された後にコールバックメソッドがあるかどうかを確認し、その後fillInVersionsListメソッドを呼び出します。

initSimulatorData(simulator)は何をしますか?これに含まれる非同期コードはありますか?

于 2012-05-11T10:04:26.757 に答える