0

我正在运行一个 HTML 文件,该文件出现错误“未捕获的类型错误:无法读取未定义的属性 '0'”

我的 JavaScript 代码是

function loadHeatMap(){
    xhr=new XMLHttpRequest();
    xhr.open('GET','/LinkedIn/heatMap.json',true);
    xhr.onreadystatechange=function(){
        if(xhr.readyState===4&&xhr.status===200){
            heatData=JSON.parse(xhr.responseText).data;
            console.log("Heat Map JSON data");
        }};
    xhr.send(null);
}

loadHeatMap();
var name = heatData.set[0].name;

JSON的结构是这样的

{"data":[{"set":[{"name":"Joe","sold":"100","target":"200"},{"name":"Tim","sold" :"200","目标":"100"}]}]}

错误发生在 'heatData.set[0].name 行,表示 0 未定义。

有人可以让我知道我做错了什么。

4

3 回答 3

2

heatDataXMLHttpRequests 是异步的,这意味着在您将数据分配给变量名称时,请求不会分配任何内容。

您必须确保在请求完成后对返回的数据进行任何处理。实现此目的的一种简单方法是向函数发送回调。

function loadHeatMap(callback) {
    xhr=new XMLHttpRequest();
    xhr.open('GET','/LinkedIn/heatMap.json',true);
    xhr.onreadystatechange=function(){
        if(xhr.readyState===4&&xhr.status===200){
            heatData=JSON.parse(xhr.responseText).data;
            // Run your callback with the data
            callback instanceof Function && callback(heatData);
        }};
    xhr.send(null);
}

loadHeatMap(function(heatData) {
    // Do all your processing with heatData here
});
于 2013-05-23T21:22:27.040 回答
0

您需要onReadyStateChange从对象中侦听事件xhr并等到它为“4”。这意味着数据已加载并且响应已准备好。然后你可以检查heatData.set[0].name. 现在,您正试图在它有机会加载之前访问它。

于 2013-05-23T21:20:09.000 回答
0
heatData=JSON.parse(xhr.responseText).data;

这应该返回这个数组

[{"set":[{"name":"Joe","sold":"100","target":"200"},{"name":"Tim","sold":"200","target":"100"}]}]

所以我认为你必须这样做:

heatData[0].set[0].name

希望能帮助到你

于 2013-05-23T21:23:30.237 回答