0

我正在尝试从一个包含以下内容的 json 文件中读取:[3000,2500,6000,2200,5000,1300]。它保存为 data.txt。在我的代码中,我创建一个空数组作为第一步。然后我将一个函数传递给 $.getJSON 函数,该函数读取 data.txt 文件的内容。然后,我读取 JSON 数组中的每一项并将其推送到我之前创建的空数组中。当我尝试打印数组的第一个元素 arr[0] 时,我得到了未定义。如果我放置 document.write(arr[0]); 最后一个括号之前的表达式,它给了我正确的答案,3000,但我需要它在外面。为什么会这样?

arr=[];

$.getJSON('data.txt',function(data) {

for (var i in data){  
arr.push(data[i]);  
}

}); 

document.write(arr[0]);
4

2 回答 2

0
  1. 不要使用for...in语法迭代数组。这是迭代对象属性的语法,这不是您想要的。

    只需使用一个for循环:

    for (var i = 0; i < data.length; i++) {
    
    }
    
  2. AJAX 是异步的,所以arr是在调用之后定义document.write()的。如果您想使用该值,请在getJSON回调中进行。

于 2013-02-21T04:59:13.207 回答
0

getJSON,就像任何其他 AJAX 请求一样,是异步的。任何依赖于它获得的数据的东西都必须放在成功回调中(或在由所述回调调用的函数中)。

结果,您将无法使用document.write(),因为文档已经加载。

相反,arr.push(data[i])请用一些代码替换以data[i]正确添加到文档中,例如将其放在文本节点中并将其附加到正文中。

var x = new XMLHttpRequest();
x.open("GET","data.txt",true);
x.onreadystatechange = function() {
  if( this.readyState == 4 && this.status == 200) {
    var r = window.JSON ? JSON.parse(this.responseText) : eval("("+this.responseText+")"),
      node, i;
    for( i in data) {
      node = document.createTextNode(data[i]);
      document.body.appendChild(node);
    }
  }
};
x.send();
于 2013-02-21T04:57:57.180 回答