これは私のコードです:
$.ajax({
url: "some_url/",
type: "GET",
dataType: "json",
success: function(data){
console.log(data);
data.forEach(function(element){
console.log(element);
});
}
});
それぞれに対してdata
変数が機能しないというエラーが表示されます。しかし、コンソールにdata
を記録すると、
[{"model": "app.mdl", "pk": 1, "fields": {"name": "test", "rank": 1}}]
これは明らかに配列であり反復可能であるため、正確には何が間違っているのかわかりません。
編集:data
はDjangoのJsonResponse
を介して返されます。
dataはJSON文字列だと思います。 forEach()
は配列関数であり、JSON文字列に実装しようとしているため、エラーがスローされます。
「キャッチされていないTypeError:data.forEachは関数ではありません」
JSON.parse()
を使用する前に、 forEach()
でデータを解析する必要があります。
JSON.parse()
メソッドはJSON文字列を解析し、文字列で記述されたJavaScript値またはオブジェクトを構築します。オプションのリバイバー関数を提供して、結果のオブジェクトが返される前に変換を実行できます。
data = JSON.parse(data);
デモ:
var data = JSON.stringify([{"model": "app.mdl", "pk": 1, "fields": {"name": "test", "rank": 1}}]);
data = JSON.parse(data);
data.forEach(function(element){
console.log(element);
});
したがって、successは次のようになります。
success: function(data){
data = JSON.parse(data);
console.log(data);
data.forEach(function(element){
console.log(element);
});
}
文字列かJSOn配列かを確認してください
if(typeof(data) === "string"){data = JSON.parse(data)}
data.forEach(function(element){
console.log(element);
});
データがJSON文字列かどうかを確認してください。
data = "[{"model":"app.mdl","pk":1,"fields":{"name":"test","rank":1}}]"
はいの場合、JSON.parse(data)を実行し、forEachを実行する必要があります。
これは、data
応答が配列のように見えても文字列である場合です。接続しているAPIにアクセスできる場合は、接続が送信する応答が配列であることを確認できますが、そうでない場合は、JSON.parse()
を使用してdata
応答を解析するだけでうまくいきます。
成功関数を次のように変更します。JSON文字列を反復処理するには、JSON.parse()
関数が必要です。
success: function(data){
data = JSON.parse(data);
console.log(data);
data.forEach(function(element){
console.log(element);
});