这是我的代码:
$.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
返回的。
答案 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);
});