从ajax调用中检索json_encoded PHP对象值?

时间:2014-01-24 16:06:12

标签: php jquery ajax json object

我的阿贾克斯:

$.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)向我展示了firebug上“ResponseJSON”中的对象,但是当我尝试类似console.log(data.userName)console.log(data[0].userName)的内容时,它们是未定义的,因为我不是很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 个答案:

答案 0 :(得分:1)

设置success handler instead of complete

  

$ .ajax()提供的回调挂钩如下:

     

[...]
  4.如果请求成功,则调用成功回调选项。它   接收返回的数据,一个包含成功代码的字符串,   和jqXHR对象。
  [...]
  6.当请求完成时,完成回调选项   无论是失败还是成功。它接收jqXHR对象,   以及包含成功或错误代码的字符串。

代码如下:

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

答案 1 :(得分:0)

似乎数据是一个对象,我设法通过data.responseJSON获取用户对象,因此名称为data.responseJSON.userName

我不知道为什么它会以这种方式返回。