2017-08-29 27 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); 
     } 


    });