0

「Uncaught TypeError: Undefined のプロパティ '0' を読み取れません」というエラーが表示される HTML ファイルを実行しています。

私の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

XMLHttpRequests は非同期です。つまり、heatData変数名にデータを割り当てた時点では、リクエストには何も割り当てられません。

リクエストが終了した後、返されたデータの処理を必ず行う必要があります。これを実現する簡単な方法は、関数にコールバックを送信することです。

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」になるまで待つ必要があります。これは、データがロードされ、respons の準備が整ったことを意味します。次に、を確認できます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 に答える