Я разрабатываю приложение, используя CakePHP 2.5.3.0, а затем я наткнулся на проблему с AJAX:
Я использую запрос AJAX от jQuery для CakePHP, чтобы отправить логин и пароль пользователя, а затем CakePHP должен вернуть ответ JSON. Проблема заключается в следующем: всякий раз, когда я использую метод Model в моем методе действий в контроллере, ответ JSON выводится с неожиданным символом перед началом JSON.
Вот скриншот, когда вы видите ответ в Google Chrome: http://img.ruphp.com/php/m5x6X4G.png
Код запроса jQuery AJAX находится здесь:
$.ajax({ url: "/login/signin.json", cache: false, type: "POST", dataType: "json", data: { email: $("#login-form").find("input[name=email]").val(), password: $("#login-form").find("input[name=password]").val() }, success: function(response) { self.callback.login(response); } });
И вот метод «signin» LoginController:
public function signin() { if(!$this->request->is("ajax")) throw new BadRequestException(); $this->layout = 'ajax'; $this->response->disableCache(); $this->RequestHandler->respondAs("application/json"); if($this->request->is("post")): $account = $this->Account->validateAccount($this->request->data['email'], Security::hash($this->request->data['password'],"sha1",true)); if(count($account)>0): $account = $account['Account']; $message = array( "success" => true, "message" => "[]"); $AccountManager = new AccountSessionManager(); $AccountManager->setId($account['id_account']); else: $message = array( "error" => true, "message" => "The entered e-mail or password are invalid", "code" => 2 ); endif; else: $message = array( "error" => true, "message" => "No POST request.", "code" => 1 ); endif; $this->set("message", $message); $this->set("_serialize", array('message')); $this->render("ajax"); }
Файл представления для «ajax», который я сделал выше, является простым
<?php echo $message ?>
Но тогда, когда я меняю эту строку
$account = $this->Account->validateAccount($this->request->data['email'], Security::hash($this->request->data['password'],"sha1",true));
в
$account = array();
Я не получаю этого странного персонажа перед ответом json.
Я не знаю, почему это происходит, но это происходит только тогда, когда я использую любые методы Model в контроллере …
Кстати, ошибка, которую я получаю от javascript, такова:
Uncaught SyntaxError: Неожиданный токен
И неожиданный персонаж, о котором я говорю, – маленькая красная точка в Chrome перед json.
Этот символ появляется, потому что один из ваших php-файлов имеет место в новой строке перед открытием php-тега
просто проверьте свои модели или конфигурации на все, чтобы найти дополнительную новую строку или пробел.
Также может возникнуть такой же характер. Файлы PHP не должны иметь никакой спецификации. Если вы использовали Блокнот Windows для редактирования ваших файлов, это обязательно спецификация. Просто используйте один из редакторов для программирования.
У вас есть googled, прежде чем спросить? Ошибка формата ответа JSON – красная точка \ пуля перед ответом