类型错误:data.forEach 不是一个函数。

21

这是我的代码:

$.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}}]。由于这是一个明显的数组并且可迭代,所以我不明白到底出了什么问题。 编辑:在Django中,data是通过JsonResponse返回的。

2
但是数组中只有一个元素 - Jack Bashford
这只是一个样本,我用它来检查我的函数,在使用实际数据集填充表格之前。 - absolutelydevastated
6个回答

34
我认为 data 是一个JSON字符串。由于forEach()是一个数组函数,并且您正在尝试在JSON字符串上实现它,因此会抛出错误:

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

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

JSON.parse()方法解析JSON字符串,构造由该字符串描述的JavaScript值或对象。可以提供可选的reviver函数来对返回结果进行转换。

data = JSON.parse(data);

Demo:

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

2

只需检查它是字符串还是JSON数组即可。

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

0

这是一种情况,你的data响应看起来像一个数组,但实际上是一个字符串。如果你可以访问到你连接的API,你可以确保它发送出去的响应是一个数组,但如果没有,只需使用JSON.parse()解析data响应即可。


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

// Just add - data.data.foreach.

0

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

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

如果是的话,你需要执行JSON.parse(data)并对其进行forEach操作。

0

将您的成功函数更改为以下内容,需要使用JSON.parse()函数来迭代JSON字符串:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接