Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-07-2008 11:51:27

exotux
Membre
Lieu: Toulouse
Date d'inscription: 02-09-2007
Messages: 16
Site web

[RESOLU] ZF 1.5 - Utilisation AJAX avec jquery

Bonjour,

J'ai un petit problème avec ZF ou JQuery, je ne sais pas trop.

Pour effectuer mes tests, j'ai un évènement "onmouseover" sur un lien <a> qui appelle une fonction JS. Cette dernière effectue une requete AJAX. Le script appelé doit simplement retourner le message "Ajax Ok".

Lorsque je teste mon bout de code, firebug m'indique bien que l'appel ajax est correctement effectué et me retourne la réponse attendue "Ajax Ok". Cependant je ne trouve pas le moyen d'exécuter la fonction JS qui devrait être appeler en cas de succès.

La fonction JS placer dans layout.phtml :

Code:

 function tooltips() {
            $.ajax({
                type:"POST",
                url:"index/ajax/format/xml",
                success: function(msg){
                    console.log('success : ' + msg);
              }
        })
    } // eo tooltips();

Mon controller :

Code:

<?php
class IndexController extends Zend_Controller_Action 
{
    public function init()
    {
        $contextSwitch = $this->_helper->getHelper('contextSwitch');
        $contextSwitch->addActionContext('ajax','xml')->initContext();
    } //eo init();

        [...]
        
        public function ajaxAction()
    {
        $this->view->resultatAjax = 'Ajax Ok';
    } // eo ajaxAction();
}
?>

Et enfin ma vue dédiée à l'action ajaxAction (ajax.xml.phtml) :

Code:

<?php 
       echo $this->resultatAjax;
?>

Mon code JS me parait correct, mais ZF me donne le résultat attendu. Bref je suis perdu big_smile

Dernière modification par exotux (06-07-2008 18:37:00)

Hors ligne

 

#2 06-07-2008 13:01:47

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [RESOLU] ZF 1.5 - Utilisation AJAX avec jquery

C'est dans success justement...

La fonction que tu as définis dans success, c'est la fonction qui sera appelée si tout s'est déroulé correctement.
Donc si tu fais qqch du style :

Code:

function tooltips() {
            $.ajax({
                type:"POST",
                url:"index/ajax/format/xml",
                success: function(msg){
                    console.log('success : ' + msg);
                    $('#mon_contenu').replaceWith(msg)
              }
        })
    } // eo tooltips();

Evidemment, tu dois avoir (dans ce cas), un bloc ayant pour identifiant mon_contenu (id='mon_contenu').

Hors ligne

 

#3 06-07-2008 13:11:41

exotux
Membre
Lieu: Toulouse
Date d'inscription: 02-09-2007
Messages: 16
Site web

Re: [RESOLU] ZF 1.5 - Utilisation AJAX avec jquery

Merci de ta réponse.

Le truc c'est que je ne rentre pas dans la fonction définie avec success. Aucun message n'apparait dans la console. J'ai ajouté ton bout de code au cas où mais le résultat est le même. Je ne rentre pas dans cette fonction et je ne sais pas pourquoi. Sans doute que tout ne se fait pas correctement mais je n'ai aucun message d'erreur sad

Dernière modification par exotux (06-07-2008 13:13:01)

Hors ligne

 

#4 06-07-2008 15:08:18

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: [RESOLU] ZF 1.5 - Utilisation AJAX avec jquery

Alors, utilisant ZF et JQuery je vais te donner ma façon de procéder.

Côté JS :

J'appelle la fonction test de mon controlleur ajax. Le résultat renvoyé par le contrôleur est exécuté en pop-up dès le retour (avec un alert).

Code:

 function tooltips() {
            $.ajax({
                type:"POST",
                url:"/ajax/test",
                success: function(returnData){
                    alert(returnData);
              }
        })
    }

Côté contrôleur : Le contrôleur va renvoyer un simple "blablabla". Donc en exécutant la fonction, tu aura un message "alert" te disant "blabla". Le exit permet de forcer le contrôleur à ne pas chercher la vue. Sans exit, le "alert" aurait affiché le contenu de la view associée au contrôleur.





Code:

<?php
class IndexController extends Zend_Controller_Action {

    public function testAction(){

        echo 'blablalba';
        exit;

    }

}

En modifiant ton JS de cette façon, le contenu de la view sera "inséré" dans ton élement dont l'ID est "résultats".

A chaque fois que ta fonction sera relancée, la div résultat sera remise à jour par le renvoi de ta view.

Code:

 function tooltips() {
            $.ajax({
                type:"POST",
                url:"/ajax/test",
                success: function(returnData){
                   
                    $('#resultats').html(returnData);

              }
        })
    }

Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#5 06-07-2008 18:35:40

exotux
Membre
Lieu: Toulouse
Date d'inscription: 02-09-2007
Messages: 16
Site web

Re: [RESOLU] ZF 1.5 - Utilisation AJAX avec jquery

T'as méthode fonctionne mais ne me convient pas complètement.

Je ne peux pas utiliser une vue pour afficher le résultat du script "ajax", l'utilisation d'un echo directement dans le controller suivi d'un exit me parait un peu barbare. Si je retire le exit, c'est toute la page qui est renvoyée (j'utilise zend_layout) et là c'est le chaos smile. J'ai l'impression de supprimer le modèle MVC  pour faire ce que je veux. Pas top il me semble, pas très propre.

Avec la méthode que j'utilise, j'indique le format de sortie du script (xml) mais ce dernier affiche seulement une bête chaine de caractères. L'appel ajax fonctionne, en tout cas du coté serveur, puisque j'obtiens la chaine correctement. Mais bizarrement l'appel de la fonction success ne se fait pas... et le pire c'est que c'est LOGIQUE. Il faut que ma vue affiche du XML !

Je commence par modifier ma vue pour rajouter l'entête XML qui va bien :

Code:

<?php
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<data>{$this->resultatAjax}</data>";
?>

Je test et ça fonctionne. Il manquait simplement une vrai structure XML. Bon, mais dans mon cas, j'ai juste besoin d'une réponse texte basique pour afficher dans un alert().... Visiblement le helper contextSwitch ne connait par défaut que XML et JSON mais il possible de créer son propre format smile smile

Donc dans mon controller je vais donc créer un context "text" :

Code:

public function init()
    {
        $contextSwitch = $this->_helper->getHelper('contextSwitch');
        $contextSwitch->addContext('text', array(
            'suffix' => 'text'
        ));
        $contextSwitch->addActionContext('ajax','text')->initContext();
    } //eo init();

Je renomme ma vue ajax.xml.phtml par ajax.text.phtml pour avoir un "type" de vue associé à mon context "text". La vue affiche une simple chaine.

Code:

<?php
echo $this->resultatAjax";
?>

Enfin, je change l'url interrogée par mon script JS url:"index/ajax/format/xml", par url:"index/ajax/format/text".

Code:

function tooltips(elt) {
            $.ajax({
                type:"POST",
                url:"index/ajax/format/text",
                success: function(returnData){
                    console.log('success : ' + returnData);
                    $('#action').html(returnData);
              }
              
        })
        } // eo tooltips();

Et hop ça fonctionne ! Merci d'avoir pris le temps de me répondre, ça ma permis d'avancé !

Hors ligne

 

#6 06-07-2008 20:03:02

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: [RESOLU] ZF 1.5 - Utilisation AJAX avec jquery

Moi j'ai implémenté le moteur de template PHPTAL avec ZF, donc mes vues sont gérées différents, c'est certainement pour ça que ma méthode me suffit amplement.

Tant mieux en tout cas si tu as réussi à faire ce que tu veux.


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages