从ajax成功函数访问Json对象 - 意外未定义

时间:2017-08-29 11:41:55

标签: jquery json

我有跟随ajax功能。

$.ajax({
        url: "/ajax",
        type: "get",
        data: values ,
        success: function (data) {

           console.log(data); // This is Line 7
           console.log(data[0].first_name);  //// This is Line 8      

        },
        error: function(jqXHR, textStatus, errorThrown) {
           console.log(textStatus, errorThrown);
        }


    });

第07行输出:[{"id":2,"first_name":"Nimalka","last_name":"Perera","address":"Kandy","age":25,"created_at":"2017-08-29 07:23:43","updated_at":"2017-08-29 07:23:43"}]

第08行输出:undefined

为什么第08行未定义?

当我用JSFiddle检查输出时,它工作正常。 (Link to the JsFiddle

但为什么在$ .ajax函数内部未定义?

3 个答案:

答案 0 :(得分:1)

您需要将data转换为JSON,然后访问键值

 success: function (data) {
           console.log(data); 
           var response = JSON.parse(data);
           console.log(response[0].first_name);        

        }

答案 1 :(得分:1)

因为你的问题为什么我会解释会发生什么。

正如其他人所说,typeof data == "string"。这意味着data[0]将成为字符串中的第一个字符。

如果是[{"id":2,"first_name":"Nimalka","last_name":"Perera","address":"Kandy","age":25,"created_at":"2017-08-29 07:23:43","updated_at":"2017-08-29 07:23:43"}],则字符为'['

因此,data[0].first_name表示JavaScript将获取对象first_name的键'['的值,该值未定义,因此返回undefined

当然,解决方法是将字符串解析为json ,正如其他提到的那样。

答案 2 :(得分:0)

这里更好,更简单的事情是,在Ajax配置中,您可以设置预期的响应类型是JSON。这将迫使Jquery为您解析数据。

以下是代码:

$.ajax({
        url: "/ajax",
        type: "get",
        data: values ,
        contentType:"JSON",
        success: function (data) {

           console.log(data); // This is Line 7
           console.log(data[0].first_name);  //// This is Line 8      

        },
        error: function(jqXHR, textStatus, errorThrown) {
           console.log(textStatus, errorThrown);
        }


    });