У меня есть следующий вызов AJAX:
$('#FonykerUsernameRegister').blur(function(){
if($(this).val().length > 2) {
alert($(this).val());
$.ajax({
url: '<?php echo $html->url('/fonykers/validate_username',true); ?>' + '/' + $(this).val(),
dataType: 'json',
type: 'POST',
success: function(response) {
if(!response.ok) {
$(this).addClass('error');
error.html(response.msg);
error.fadeIn();
} else {
if($(this).is('.error')) {
alert('im in');
$(this).removeClass('error');
}
$(this).addClass('ok');
}
},
error:function (xhr, ajaxOptions, thrownError){
alert('You fail');
alert(xhr.statusText);
alert(thrownError);
}
});
} else {
error.html('Username must have at least 3 characters');
error.fadeIn();
$(this).addClass('error');
}
});
И это метод, который он вызывает:
function validate_username($username) {
$this->layout = 'ajax';
$response = array();
$fonyker = $this->Fonyker->find('first', array(
'conditions' => array('Fonyker.username' => $username)
));
if(!strlen($username) > 2) {
$response = json_encode(array('ok' => false, 'msg' => 'Username must have at least 3 characters'));
} else if(!preg_match('"^[a-zA-Z0-9]+$"', $username)) {
$response = json_encode(array('ok' => false, 'msg' => 'Username must be alphanumeric'));
} else if ($fonyker) {
$response = json_encode(array('ok' => false, 'msg' => 'Username is already in use'));
} else {
$response = json_encode(array('ok' => true, 'msg' => ''));
}
echo $response;
}
В вызове AJAX он всегда переходит к части ошибки и выводит, чтоошибка, и я не вижу пробелов в моем коде PHP.Есть мысли?
РЕДАКТИРОВАТЬ:
То, что происходило, было то, что CakePHP отражал весь вид в ответ, но не на самом деле вид, но экран ошибки.
Если вам нужны методы AJAX в вашем контроллере, которые не требуют представления, вы должны установить свойство $this->autoRender
в методе контроллера на false
, прежде чем что-либо делать.