2014-01-24 19 views
0

我的AJAX:從ajax調用中檢索json_encoded的PHP對象值?

$.ajax(
     { 
      type:'POST', 
      url: 'ajax.php',     //the script to call to get data 
      data: {request: 'getUser',id:id}, 
      dataType: 'json',    //data format 
      complete: function(data)   //on receive of reply 
      { 
       console.log(data); 
      } 
     }); 

我的PHP文件,處理AJAX請求(ajax.php):

elseif ($_POST['request'] == 'getUser') 
    { 
     $DAO = new UserDAO; 
     $q = $DAO->ajaxGetUser($_POST['id']); 
     echo json_encode($q); 
    } 

ajaxGetUser功能:

public function ajaxGetUser($id) 
    { 
     $q = $this->db->prepare('SELECT * FROM user WHERE userId=:id'); 
     $q->bindValue(':id', $id, PDO::PARAM_INT); 
     $q->execute(); 
     $r = $q->fetch(PDO::FETCH_OBJ); 
     unset($r->userPassword); 
     return $r; 
    } 

console.log(data)是顯示我的對象螢火蟲上的「ResponseJSON」,但當我嘗試像console.log(data.userName),console.log(data[0].userName)這樣的東西時,它們是未定義的,因爲我是n在Ajax非常好,我一直在尋找很多線程,但找不到可以幫助我的線程。

我猜json已經被解析了,因爲dataType被設置爲「json」,我如何訪問User對象的所有屬性?感謝您的幫助

readyState 4 

responseJSON 
    Object { userId="6", userName="321", more...} 

responseText 
    "{"userId":"6","userName...":null,"userStatus":"0"}" 

status 200 
statusText "OK" 
abort function()  
always function() 
complete function() 
done function() 
error function() 
fail function() 
getAllResponseHeaders function()  
getResponseHeader function() 
overrideMimeType function() 
pipe function() 
progress function() 
promise function() 
setRequestHeader function() 
state function() 
statusCode function() 
success function() 
then function() 
+2

你能後的'的console.log(數據)的輸出'? – tymeJV

回答

1

設置一個success handler instead of complete

由$就()所提供的回調掛鉤如下:

[...]
4.成功回調選項被調用,如果該請求成功。它 接收返回的數據,一個包含成功代碼的字符串, 和jqXHR對象。

6.完成回調選項,當請求結束時觸發, 是否失敗或成功。它接收jqXHR對象 以及包含成功或錯誤代碼的字符串。

的代碼是這樣:

success: function(data) 
{ 
    console.log(data, data.userId, data.userName); 
} 
+0

好趕上!我沒有注意到他在他的'$ .ajax'調用中使用了錯誤的回調。 –

+0

有趣的部分是我在開始時使用成功,非常感謝,回去工作! – adaba

0

似乎數據的對象,我設法讓用戶對象是通過使用data.responseJSON,所以data.responseJSON.userName的名稱。

我不知道爲什麼它會以這種方式返回。

+0

看看[@Salman A的答案](http://stackoverflow.com/a/21338108/206403)。您在'$ .ajax'中使用了錯誤的回調。你想'成功:',而不是'完成:'。被調用時它們被傳遞不同的參數。 http://api.jquery.com/jquery.ajax/ –