SyntaxError: JSON.parse: неожиданный непробельный символ после данных JSON - PullRequest
2 голосов
/ 20 июля 2011

У меня есть следующий вызов 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, прежде чем что-либо делать.

Ответы [ 6 ]

2 голосов
/ 24 июня 2012

Возможно, в вашей функции ajax было эхо.Проверьте это и удалите все эхо, печать, отладку из функции ajax.

Когда вы возвращаете данные JSON, вы не можете ничего повторить.

1 голос
/ 21 июля 2011

На основании ответа на комментарий ОП:

Хотя я не совсем знаком с способом CakePHP, при использовании ZendApplication первое, что нужно сделать, - создать пустой макет. Обычные ответы размещаются в макете по умолчанию, а ответы ajax - в пустом макете.

В ваших методах контроллера установите $this->layout на пустой макет, чтобы переопределить значение по умолчанию, где это применимо.

См. http://www.balistupa.com/blog/2009/07/how-to-change-cakephp-layout/ для более конкретных инструкций

0 голосов
/ 08 октября 2013

У меня была такая же проблема, но я решил с помощью "$ this-> autoRender = false;"в функции!

0 голосов
/ 21 марта 2013

Ваш клиент / ajax-вызов ожидает JSON dataType от сервера.Теперь вам нужно убедиться, что сервер возвращает JSON dataType, иначе измените запрос на запрос, чтобы отразить, что возвращает служба.

Чтобы исследовать это, используйте firebug, чтобы увидеть, что вы получаете в ответ.Я только что получил эту ошибку, и я исправил ее.

0 голосов
/ 30 ноября 2012

При использовании ColdFusion для разработки обязательно отключите отладку, иначе это может вызвать эту проблему

0 голосов
/ 21 июля 2011

Вы проверяли файл ajax.ctp в папке раскладок внутри папки просмотра?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...