2015-02-12 2 views
1

Почему журнал консоли: {} У меня есть в JS следующего АЯКС вызова:Как получить json-строку в js из jQuery 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; 
     } 
    } 

} 

лог консоли только {}, но я хотите объект User в JSON. Я что-то упускаю?

+0

потому, что вы ваш DATATYPE установлен в JSON, если установить его в том, что jQuery автоматически анализирует текст JSON для объекта. Если вы просто хотите, чтобы текст textType менял текст. –

ответ

0

Если вы используете json_encode для класса, частные свойства этого класса никогда не будут видны.

Так что если вы меняете:

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

к:

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

результат будет:

{ 
    username: "some-user-name" 
} 
0

Вы используете метод json_encode, передающий объект класса.

Для PHP преобразовать объект в 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; 
    } 
} 
0

Я думаю, вы должен возвращать $newUserInJason

Смежные вопросы