代码之家  ›  专栏  ›  技术社区  ›  absolutelydevastated

TypeError:data.forEach不是函数

  •  1
  • absolutelydevastated  · 技术社区  · 7 年前

    这是我的密码:

    $.ajax({
        url: "some_url/",
        type: "GET",
        dataType: "json",
        success: function(data){
            console.log(data);
            data.forEach(function(element){
                console.log(element);
            });
        }
    });
    

    data 变量但是,当我登录 数据 到控制台去,我明白了

    [{"model": "app.mdl", "pk": 1, "fields": {"name": "test", "rank": 1}}]

    这显然是一个数组和iterable,所以我不知道到底是什么错。

    编辑: 数据 通过返回 JsonResponse

    5 回复  |  直到 7 年前
        1
  •  19
  •   Mamun    7 年前

    我相信 数据 是JSON字符串。自从 forEach() 是一个数组函数,您试图在JSON字符串上实现它,它抛出错误:

    “未捕获类型错误:data.forEach不是函数”

    JSON.parse() 使用前 forEach() :

    这个

    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
  •  2
  •   Negi Rox    7 年前

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

    if(typeof(data) === "string"){data = JSON.parse(data)}
     data.forEach(function(element){
                console.log(element);
            });
    
        3
  •  0
  •   Anjana G    7 年前

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

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

        4
  •  0
  •   codejockie    7 年前

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

        5
  •  0
  •   Muhammad Hamza    7 年前

    将你的成功函数改为 JSON.parse()

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