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


How do i get a json string in js from a jquery ajax call?

为什么控制台日志:{}我在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对象。我是不是错过了什么?

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

所以,如果你改变:

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

至:

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

结果将是:

{
    username: "some-user-name"
}

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

对于php将Object转换为Json,您必须实现接口JsonSerializable:JsonSerialisable 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;
   }
}

我想您应该返回$newUserInJason