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

Javascript 如何从jquery ajax调用中获取json字符串?,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,为什么控制台日志为:{} 我在以下ajax调用中遇到了一个问题: $.ajax({ url: '.../models/user.php', type: 'POST', dataType: "json", data: {username: username, password:password, func:func}, success: function(data) { console.log(data); } }

为什么控制台日志为:{} 我在以下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中的用户对象。我遗漏了什么吗?

您正在使用json\u encode方法传递一个类对象

对于将对象转换为Json的php,必须实现JsonSerializable接口:

这样,您就可以使用json_编码来传递对象,而不会出现任何问题 您使用的方法实现代码如下:

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

如果在类上使用json\u编码,那么该类的私有属性将永远不可见

因此,如果你改变:

    private $username = '';
    private $password = '';
致:

结果将是:

{
    username: "some-user-name"
}

因为您将数据类型设置为json,所以当将其设置为json时,jQuery将自动将json文本解析为对象。如果只需要文本,请将数据类型更改为文本。
{
    username: "some-user-name"
}