Ajax JSON всегда возвращает ошибку, хотя формат JSON в ответе является правильным
Я пытался реализовать вход Ajax с CakePHP 1.3. У меня есть всплывающее окно с простым именем пользователя / пароль для входа.
Следующее находится в моих представлениях / elements / login.ctp:
echo $this->Form->create('User', array('url'=>array('controller'=>'users','action'=>'login'), 'id'=>'user_login'));
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end('Login'));
Следующее есть в моем контроллере controllers/users_controller.php
public function ajax_login() {
$response = array('success'=>false);
if($this->RequestHandler->isPost()) {
if($this->Auth->login()) {
$response = array('success'=>"true");
} else {
$response = array('success'=>false);
}
}
$this->set('response', $response);
}
Представление для вышеуказанного контроллера находится под views/users/ajax_login.ctp имеет ТОЛЬКО эту строку:
echo $javascript->object(isset($response) ? $response : array());
Мой Ajax имеет следующий код:
function login_user(){
var username = $("#UserUsername").val();
var password = $("#UserPassword").val();
if(username == "" || username == null || password == "" || password == null){
alert("Please enter a username and password");
return false;
}
$.ajax({
url:"/users/ajax_login",
type:"POST",
data:$('#user_login').serialize(),
dataType:"json",
async: true,
success: function() { console.log("success"); },
error: function(msg) { console.log(msg); }
});
return false;
}
Теперь, кажется, все работает отлично, однако, это всегда приводит к обратному вызову "error", и я не знаю почему. Я прочитал все ссылки ниже на stackru, и ни одна из них, похоже, не является проблемой!
Странное поведение JSON при запросе файла json через $.ajax искаженный JSON, в то время как JSON действителен? Результат ошибки Ajax: jts_encode struts2 создает искаженный JSON (с дополнительным скрытым символом) php json_encode, не возвращающий правильную строку в кодировке json
Единственное, что я подозреваю, это когда я читаю console.log(msg)
ошибки, я получаю правильный ответ HTML {"success":true} в правильном формате... НО... "responseText" я получаю что-то вроде этого:
responseText: "{" success ": true}"
так что в основном я догадываюсь, что именно это "" приводит к тому, что формат json всегда терпит неудачу в моем вызове ajax. Как же я могу избавиться от этого?!... Я больше не уверен, является ли это проблемой CakePHP, или проблемой AJAX/JSON!... Я работал над обоими более 5 лет, и теперь я застрял!
1 ответ
Действительно строка <!-- 0.375s -->
нарушает ваш код Попытайтесь выяснить, откуда это исходит. Некоторые шаги:
- Какой макет вы используете для рендеринга? Пытаться
debug($this->layout)
в вашем контроллере, чтобы увидеть, что на нем есть. Это вполне может быть там, так как я не вижу, чтобы вы устанавливали макет вajax
например. Торт имеет этоajax
макет, который по сути является пустым макетом. Он не должен содержать ничего, кромеecho $content_for_layout;
в CakePHP 1.3. - Проверьте и убедитесь, что ваш кодировщик UTF-8 "выплеван". Это необходимо для JSON.
- Попробуйте заменить текущий код представления на
echo json_encode($response);
или сохранить трехстороннюю проверку:echo isset($response) ? json_encode($response) : '';
JavaScriptHelper в любом случае будет то же самое. - Эта "странная строка" вполне может быть комментарием некоего анализатора производительности "время рендеринга". Он приходит откуда-то из вашего приложения, и, как вы можете видеть, это HTML-комментарий. Уменьшите значение отладки в
Config/core.php
- Я предполагаю, что это 3.
Я предполагаю, что проверка макета и установка его в ajax
или же empty
решит вашу проблему.