【问题标题】:TypeError: data.forEach is not a function类型错误:data.forEach 不是函数
【发布时间】: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 返回。

【问题讨论】:

  • 但是数组中只有一个元素
  • 这只是我在用实际数据集填充表之前用来检查我的函数的示例。

标签: javascript jquery html django


【解决方案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。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-02-26
            • 2013-04-01
            • 2016-03-06
            • 2018-04-28
            • 2019-02-14
            相关资源
            最近更新 更多