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

Posted

技术标签:

【中文标题】类型错误:data.forEach 不是函数【英文标题】:TypeError: data.forEach is not a function 【发布时间】:2019-04-15 22:56:13 【问题描述】:

这是我的代码:

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

【问题讨论】:

但是数组中只有一个元素 这只是我在用实际数据集填充表之前用来检查我的函数的示例。 【参考方案1】:

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

“未捕获的类型错误: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);
    );

【讨论】:

【参考方案2】:

将你的成功函数改成这个,JSON.parse() 函数需要遍历 JSON 字符串:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

以上是关于类型错误:data.forEach 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

Cloud Functions for Firebase 错误:“400,不允许更改函数触发器类型或事件提供程序”

在 VBA 中是不是有循环类型、函数或方法来清理 HTML 文件中节点的嵌套 For Each 循环?

类型错误:todo 不是函数

类型错误:opendirSync 不是函数

错误类型错误:_co.deleteConsulta 不是函数

类型错误:hbs 不是函数