我有跟随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函数内部未定义?
答案 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);
}
});