我正在尝试创建一个非常简单的聊天应用程序但我却陷入了一种奇怪的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循环没有被执行。经过一些调试后,我发现退出$ .getJSON()函数后我的msg
数组被重置(如果我把for循环放在里面工作)
这可能是一些基本的语法错误或我对javascript变量的错误理解,但我坚持了一段时间,而且我的广泛的谷歌搜索没有产生任何结果。
答案 0 :(得分:1)
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');
}
});
});