0

非常にシンプルなチャット アプリを作成しようとしていますが、奇妙な JavaScript の動作に行き詰まりました。

これが私のコードです:

var msg = [];
  $(document).ready(function(){
    $.getJSON('chat_ajax.php?get=1', function(data) {
      $.each(data, function(key_i, val_i) {
        var node = [];
        $.each(val_i, function(key, val){
          node.push(val);
          //$('body').append('Test');
        });
        msg.push(node);
      });
    });
    for (var f=0;f<msg.length;f++){
        $('body').append('Test');
    }
  });

これは<script>直前のタグに含まれて</body>おり、?get=1パラメーターはデバッグ用であることに注意してください

問題は、for ループが実行されないことです。いくつかのデバッグmsgの後、$.getJSON()関数を終了した後に配列がリセットされることがわかりました(forループを内部に配置すると機能します)

おそらく基本的な構文エラーか、javascript 変数の理解が間違っているのでしょう。

4

1 に答える 1

1

メソッドはgetJSON非同期で完了します。したがって、for値を に追加するコールバック関数の前にループが実行されますmsgforループをコールバック に移動する必要があります。

var msg = [];
  $(document).ready(function(){
    $.getJSON('chat_ajax.php?get=1', function(data) {
      $.each(data, function(key_i, val_i) {
        var node = [];
        $.each(val_i, function(key, val){
          node.push(val);
          //$('body').append('Test');
        });
        msg.push(node);
      });

      for (var f=0;f<msg.length;f++){
        $('body').append('Test');
      }
    });
  });
于 2013-03-28T22:01:53.653 に答える