TypeError:data.forEach不是一个函数

时间:2018-11-13 06:55:25

标签: javascript jquery html django

这是我的代码:

$.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返回的。

5 个答案:

答案 0 :(得分:3)

我相信 data 是JSON字符串。由于forEach()是一个数组函数,而您尝试在JSON字符串上实现它,则会引发错误:

  

“未捕获的TypeError:data.forEach不是函数”

在使用forEach()之前,您必须使用JSON.parse()解析数据:

  

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);
    });
}

答案 1 :(得分:0)

只需检查数据是否为JSON字符串即可。

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

如果是,则必须执行JSON.parse(data)并对其进行forEach。

答案 2 :(得分:0)

只需检查它是字符串还是JSOn数组

if(typeof(data) === "string"){data = JSON.parse(data)}
 data.forEach(function(element){
            console.log(element);
        });

答案 3 :(得分:0)

在这种情况下,您的data响应看起来像一个数组,但它是一个字符串。如果您有权访问要连接的API,则可以确保它发出的响应是一个数组,但如果不是简单地使用data来解析JSON.parse()响应,就可以解决问题。

答案 4 :(得分:0)

将您的成功函数更改为此,JSON.parse()函数需要遍历JSON字符串:

success: function(data){
        data = JSON.parse(data);
        console.log(data);
        data.forEach(function(element){
            console.log(element);
        });