1. ホーム
  2. javascript

[解決済み] TypeError: data.forEach は関数ではありません。

2022-02-19 12:31:51

質問

これは私のコードです。

$.ajax({
    url: "some_url/",
    type: "GET",
    dataType: "json",
    success: function(data){
        console.log(data);
        data.forEach(function(element){
            console.log(element);
        });
    }
});

でfor eachが効かないというエラーが出ます。 data 変数を使用します。しかし、ログを取ると data をコンソールに出力すると

[{"model": "app.mdl", "pk": 1, "fields": {"name": "test", "rank": 1}}]

これは明らかに配列であり反復可能なものです。

EDIT data が返されます。 JsonResponse を Django で使用することができます。

どのように解決するのですか?

私が思うに データ はJSON文字列です。ということは forEach() は配列関数で、それをJSON文字列に対して実装しようとするとエラーが発生します。

"Uncaught TypeError: data.forEach is not a function"

でデータをパースする必要があります。 JSON.parse() を使用する前に forEach() :

のことです。 JSON.parse() メソッドは JSON 文字列を解析し、その文字列で記述された JavaScript の値またはオブジェクトを構築します。オプションの reviver 関数を提供することで、結果のオブジェクトを返す前に変換を実行することができます。

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: function(data){
    data = JSON.parse(data);
    console.log(data);
    data.forEach(function(element){
        console.log(element);
    });
}