0

それで、私が持っているJSONを吐き出すphpページからオブジェクトを取得しました。グローバル変数をオブジェクトから作成したオブジェクトに等しく設定し、 for(key in obj) ループでデータを取得しようとすると、うまくいかないようです。

for ループをランダムな $.post のようなもので囲むと、機能します。なぜこれが起こるのか、私はとても混乱しています。

これが私のコードです:

var myObj1 = new Object;

$(document).ready(function() {
$.post('namenums.php', {num : 1}, function(data) {
    var temp = $.parseJSON(data);
    for(var key in temp) {
        myObj1[key] = temp[key]['firstname'] + ' ' + temp[key]['lastname'];
    }
});

getStuff();
thing();
});

function thing() {
    for(var key in myObj1) {
        console.log(key);
    }
}

これで、thing() 関数をこのようなものに変更すると、機能します。

function thing() {
        $.post('random.php', function(data) {
    for(var key in myObj1) {
        console.log(key);
    }
        });
}

それで、誰かがなぜこれが起こるのか説明してもらえますか?

4

1 に答える 1

1

もちろん。最初の例でthing()は、ドキュメントの準備ができたときに が呼び出されています。必ずしも によって開始された AJAX 呼び出し$.postが完了した後ではありません。2 番目の例では、AJAX 要求が終了して完了し、結果が返されるまで、何もログに記録しようとしません。

thing()に提供されたコールバック内に呼び出しを移動することで、最初の例を修正できます$.post

$(document).ready(function() {
  $.post('namenums.php', {num : 1}, function(data) {
    var temp = $.parseJSON(data);
    for(var key in temp) {
      myObj1[key] = temp[key]['firstname'] + ' ' + temp[key]['lastname'];
    }
    thing();
  });

  getStuff();
});
于 2012-07-24T06:21:24.293 に答える