2014-01-24 9 views
0

Мой Аякса:Извлечение значений объекта json_encoded PHP из вызова ajax?

$.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» на firebug, но когда я пробую что-то вроде console.log(data.userName), console.log(data[0].userName), они не определены, так как я n ot очень хорошо в 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:

выполнения обратного вызова крючков, предусмотренных $ .ajax() следующим образом:

[...]
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'. Вы хотите 'success:', а не 'complete:'. При вызове им передаются разные параметры. http://api.jquery.com/jquery.ajax/ –

Смежные вопросы