为什么控制台会记录:{} 我在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对象。我错过了什么吗?
答案 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"
}