2016-04-25 3 views
0

ではありませんこれは私がUncaught TypeError: data.forEach is not a functionを取得し、私のJSONdata.forEachが機能

[ 
"59191", "TypeAV - Canada", "Available", 
"422129", "TypeAA - Italy", "Available", 
"959191", "TypeBB - USA", "N/A", 
"6D968C", "TypeAV - Canada", "Available" 
] 

とJS

$.ajax({url: 'test.json'}).done(function(data) { 
    $.each(myArr, function() { 
    data.forEach(function (line) { 
     //do something 
    }); 
    }) 
}) 

です。これを修正するには?

+3

「myArr」とは何ですか?それはどこから来たのですか?そして、あなたは 'line'という名前を使って2つの異なることを意味しているように見えます。 – Pointy

+0

データが配列ではないようです – maioman

+0

'console.log(typeof data)'とは何ですか? – Barmar

答えて

4

dataは明らかに配列ではありません。サーバがContent-type: application/jsonを送信した場合、$.ajaxはレスポンスをJSONとして自動的に解析しますが、これを実行してはいけません。 jQueryはレスポンスをJSONとして解析する必要があることを知らないため、単に文字列レスポンスをコールバック関数に渡します。

したがって、JQueryにJSONであり、解析する必要があることを伝える必要があります。最も簡単な方法は$.ajaxに複雑なオプションを渡さないので$.ajaxの代わりに$.getJSONを使用することです。

$.getJSON('test.json', function(data) { 
    ... 
}); 

また、 `$ .ajax 'にはdataType:オプションを使用することもできます。

$.ajax({ 
    url: "test.json", 
    dataType: "json" 
}, function(data) { 
    ... 
});