如何从jquery ajax调用中获取js中的json字符串?

时间:2015-02-12 17:54:40

标签: javascript php jquery ajax json

为什么控制台会记录:{} 我在js中有以下ajax调用:

$.ajax({
     url: '.../models/user.php',
     type: 'POST',
     dataType: "json",
     data: {username: username, password:password, func:func},
     success: function(data) {
           console.log(data); 
     }
});

和我的user.php

switch ($_POST['func']) {
    case 'register':
        $user = new User();
        $a = $user->register($_POST['username'], $_POST['password']);
        $b = json_encode($a);
        echo $b;
        break;
}

class User {

    private $username = '';
    private $password = '';

    Function register($user, $code) {


        //..database things...

       if(succes){
        $newUser = new User();
        $newUser->username = $user;
        $newUserInJason = json_encode($newUser);
        return $newUser;
       }
    }

}

控制台日志只有{}但我想要JSON中的User对象。我错过了什么吗?

3 个答案:

答案 0 :(得分:0)

您正在使用传递Class对象的方法json_encode。

对于php将Object转换为Json,您必须实现JsonSerializable接口:JsonSerializable inferface doc

这样你就可以使用json_encode传递一个对象而没有任何问题 您使用以下代码的方法实现:

get_object_vars($this)

所以你的用户类必须看起来像这样

class User implements JsonSerializable{

// Interface method you must implement:
public function jsonSerialize(){
    return get_object_vars($this);
}

// The rest remains the same

private $username = '';
private $password = '';

Function register($user, $code) {


    //..database things...

   if(succes){
    $newUser = new User();
    $newUser->username = $user;
    $newUserInJason = json_encode($newUser);
    return $newUser;
   }
}

答案 1 :(得分:0)

我猜您应该返回$newUserInJason

答案 2 :(得分:0)

如果在类上使用json_encode,则该类的私有属性将永远不可见。

所以,如果你改变:

    private $username = '';
    private $password = '';

为:

    public $username = '';
    private $password = '';

结果将是:

{
    username: "some-user-name"
}