繁体   English   中英

如何从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方法传递Class对象。

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

这样,您可以使用json_encode毫无问题地传递对象该方法实现使用以下代码:

get_object_vars($this)

所以您的User类必须看起来像这样

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_encode,则该类的私有属性将永远不可见。

因此,如果您更改:

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

至:

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

结果将是:

{
    username: "some-user-name"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM