2017-08-29 63 views
0

我有以下ajax函数。从ajax成功函数访问Json对象 - 意外的未定义的

$.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

你得到一个字符串响应。首先使用JSON.parse将其转换为对象。 – Shubham

+0

@Shubham谢谢。它的工作原理:-)即使我在PHP文件中返回Json('return json_encode($ students);')为什么它变成了字符串? – Dreengreen

+0

javascript不期待一个对象。您必须将dataType设置为JSON。 – Shubham

回答

1

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

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

     } 
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将获得对象'[',这是没有定义的信息,并返回undefined的键first_name值。

当然,解决方法是将解析为json的字符串,如其他所述。

+0

我不认为这里的解释是相关的。 –

+0

其实我相信它可以帮助别人学习如何调试自己,所以它**非常相关** – Adelin

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


    }); 
相关问题