全局变量退出函数后重置

Global variable resets after exiting function

本文关键字:函数 退出 全局变量      更新时间:2023-09-26

我想创建一个非常简单的聊天应用程序,但我被一个奇怪的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');
    }
  });

注意,这包含在</body>之前的<script>标记中,?get=1参数仅用于调试

问题是for循环不会被执行。经过一些调试,我发现我的msg数组在退出$.getJSON()函数后重置(如果我把for循环放在里面它的工作)

这可能是一些基本的语法错误或我对javascript变量的错误理解,但我坚持了一段时间,我广泛的谷歌没有产生任何结果。

getJSON方法异步完成。因此,for循环在回调函数之前执行,该函数将值添加到msg。您需要将for循环移动到回调中。

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