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

新手上路,请多包涵

这是我的代码:

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

原文由 absolutelydevastated 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 889
2 个回答

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

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

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

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

原文由 Mamun 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 Negi Rox 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题