从JSON文件中提取Javascript中的元素

时间:2013-02-21 04:54:57

标签: javascript json

我正在尝试从一个简单地包含以下内容的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]);

2 个答案:

答案 0 :(得分:0)

与任何其他AJAX请求一样,

getJSON是异步的。任何依赖于它获取的数据的东西必须放在成功回调中(或者在所述回调调用的函数中)。

因此,您将无法使用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();

答案 1 :(得分:0)

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

    只需使用for循环:

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