未捕获的TypeError:无法读取未定义的属性“0”

时间:2015-02-06 22:19:25

标签: javascript jquery json xmlhttprequest

这是我的剧本:

<script>
var count;
var obj;

function recherche() {
    xhr = new XMLHttpRequest();
    xhr.open("GET", "test.json", true);
    xhr.send(null);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            var res = xhr.responseText;
            obj = JSON.parse(res);

            for (count = 0; count < obj.length; count++) {
                alert(obj[count].humidity);
            }
        }

    }

}
                            alert(obj);

window.onload = recherche;
</script>

运行此脚本后出现此错误:

Uncaught TypeError: Cannot read property '0' of undefined

第一个警报工作正常,显示我20,30,40,但如果我在外面做警报我没有定义。

我想使用对象obj将其存储在json文件中的数据用作数据,以便在脚本中进一步绘制图表。但是这个错误会弹出。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

默认情况下,XHR请求是异步。这意味着send 启动它们,但它们稍后完成(这就是为什么它们有回调而不是返回值)。只需在回调中使用obj


旁注:您的代码正在成为The Horror of Implicit Globals的牺牲品(您永远不会声明您的xhr变量。)