SyntaxError: JSON.analyser: inattendu caractère non-blanc après les données JSON

J'ai le texte suivant appel 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');
            }
        });

Et c'est la méthode qu'il appelle:

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;
    }

Dans l'appel AJAX, il va toujours de l'erreur de la partie et les sorties d'erreur, et je ne vois pas d'url dans mon code PHP. Toutes les pensées?

EDIT:

Ce qui se passait, c'est que CakePHP était en écho à la vue d'ensemble de la réponse, mais pas vraiment du point de vue, mais l'écran d'erreur.

Si vous avez besoin de méthodes AJAX dans votre contrôleur qui ne nécessitent pas de vue que vous devez définir la $this->autoRender bien sur la méthode de contrôleur de false avant de faire quoi que ce soit.

  • l'erreur est d'un caractère non-blanc, pas un caractère d'espacement. Aussi, pourriez-vous poster la résultante du json? Utiliser Firebug (ou similaire) pour observer la réponse.
  • En regardant la réponse je vois que le gâteau est de renvoyer l'intégralité de la page HTML avec la réponse JSON, parce qu'il dit qu'il nécessite un point de vue.
  • Vous ne devriez pas être l'écho des choses à partir de votre contrôleur de méthode. C'est ce que les vues sont pour. La façon techniquement correcte de cette approche serait de définir une variable de réponse ici, et l'écho dans la vue. C'est un peu fastidieux de créer un nouveau fichier à echo, une ligne, de sorte que vous pouvez également return $réponse à partir de cette méthode et vous aurez la réponse à votre appel ajax. Les deux sont préférables à résonner dans un contrôleur de méthode je pense.
InformationsquelleAutor 8vius | 2011-07-20