类型错误: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 循环?