Voilà mon problème. Je suis sur un projet de test cakephp, et sur l'édition d'un article plus particulièrement.
J'ai un onglet "Tags" qui contient un input type text dans le but d'une recherche en ajax (focus & keyup).

À chaque touche saisie, la requête ajax s'éxécute et demande à Cakephp un find condition first sur la valeur envoyée.

Le problème est que : à chaque fois pour un success, même s'il y a n'y a pas de echo dans ma méthode PHP, il y a un alert vide.
J'aimerai que si c'est vide, ça ne fasse rien. Mais ça alert quand même.

$(function(){
$('#ArticleText').focus(function(){
$(this).on('keyup', function(){

    var mysearch = $(this).val();
    if(mysearch.length > 2){
         $.ajax({
                    type:'POST',
                    async: true,
                    data:{"data" : mysearch},
                    cache: false,
                    //dataType: 'json',
                    url: 'projet1/App/controller/admin/articles/edit',

                    success: function(data) {  
                          if(data != ''){
                            alert(data);
                          }
                    },
                });
    }
  });

});
});

Comme vous le voyez, if(data != ''){ n'y change absolument rien.
Pouvez-vous m'aider ?

5 réponses


Voici ma méthode de traitement PHP (cakephp) au cas ou :

if($this->request->is('ajax')){
        $this->layout = false;

        if(!empty($this->request->data)){
            $data = $this->request->data;
        }
        if(is_string($data)){

            $tag_trouve = $this->Article->Tag->find('first',array(
                'conditions'=>array('Tag.name'=>$data)
            )); 

            if(!empty($tag_trouve'Tag']'name'])){
                $tag_trouve = $tag_trouve'Tag']'name'];

            }

            if(!empty($tag_trouve) && is_string($tag_trouve)){
                echo $tag_trouve;
            }
        }
        //echo '<h1>vous êtes en ajax</h1>';
        exit();
    }

j'ai l'impression que data est un objet. Tente un

if(data){
    alert(data);
}

Hélas, non, ça ne fonctionne pas, j'ai essayé.
Il me semble que j'ai essayé avec length aussi.

J'ai remplacé mon code dans success :

if ($.trim(data).length > 0) {
   $(data).replaceAll("\n");

   alert(data.toSource());
}

J'obtiens avec le alert :

(new String("\n\n\n\n\nLinux"))

"Linux" est le tag trouvé par ma méthode PHP. Par contre, les retour-chariot (\n\n\n), je comprends pas.

Dans ma méthode il y a :

$this->autoRender = false;
$this->render(false);

As tu testé avec un return au lieu de echo ?

J'ai réussi à éliminer ces retour-chariot (\n\n\n) mais c'est assez sale puisque de toutes façons :

1/Je ne veux pas qu'ils soient là
2/Je ne sais pas d'où ils viennent

Il me semble que ça marche maintenant mais je retravaillerai ce code et je ferai suivre.