为什么控制台日志:{}我在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