Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-08-2008 00:59:06

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Difficulté pour faire de l'Ajax propremement

Bonjour à tous,

Maintenant que mon site est en ligne et bien construit j'aimerai mettre un peu d'ajax la dedans. J'ai déjà programmé pas mal en ajax où j'ai été amené à utiliser prototype. Le problème c'est que je n'arrive pas à utiliser Ajax.Request ou du moins ici je ne comprend pas comment faire. Je voudrai qu'une action d'un controleur effectue un traitement, pour commencer juste afficher un message d'alert lorsque la requete s'est bien réalisée mais là ça coince justement rien ne s'affiche! Je tiens à dire que rien de particulier n'est fait dans l'action test c'est juste pour essayer pour le moment.

Voici le code très simple:

Code:

new Ajax.Request( '<? echo $this->baseUrl(); ?>index/test', { 
          
         method:'get', 
         async:false, 
         onComplete:function( e ) { 

            alert("OK") ; 
         } 
      } ) ;

Or il ne m'affiche aucun message d'alert, j'en conclue donc que mon code est incorrect et je soupconne l'url mais dans ce cas comment l'écrire? ^^

Merci par avance de vos réponses.

Dernière modification par Mr.MoOx (28-08-2008 12:14:49)


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#2 28-08-2008 01:44:50

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: Difficulté pour faire de l'Ajax propremement

euh je ne comprend pas trop ton bout de code il est ou il est sensé faire quoi ?

ca c'est du javascript:

Code:

new Ajax.Request

ca du php:

Code:

<? echo $this->baseUrl(); ?>

tu a donc mis ton JS dans une vue ? (pas propre :p )

ok voici une solution qui devrais fonctionner

controlleur:

Code:

<?php
        class Ajax_ValidateController extends Zend_Controller_Action
     {
     
         /**
          * @var Zend_Controller_Action_Helper_AjaxContext
          */
         protected $_AjaxContext;
         
         public function init()
         {
             $this->_AjaxContext = $this->_helper->getHelper('AjaxContext');
             $this->_AjaxContext
                 ->addActionContext('test', 'json')
                 ->addActionContext('email', 'json')
                 ->initContext('json')
             ;
         }

         public function testAction()
         {
               $data = array(1,2,3,4,5,100,42,54,240,50,50,54,504,50,405,45,5,41,);
            $this->view->data = $data;
         }

         public function emailAction()
         {
             $data = array(
                 'givenEmail'=> $_POST['address'],
                 'isValid' => '0',
                 'error' => null,
                 'validEmail' => null
             );
            
             
             $V = new Zend_Validate_EmailAddress(
                 Zend_Validate_Hostname::ALLOW_DNS,
                 true
             );
             
             
             if($V->isValid($data['givenEmail']))
             {
                 $data['isValid'] = '1';
             }
             
             if (count($V->getMessages()) > 0)
             {
                 $Messages = $V->getMessages();
                 foreach($Messages as $K=>$Message)
                 {
                     // on force une seule erreur, enlever '0' pour les avoir toutes
                     $data['error'][0] = $Message;
                 }
             }
             else
             {
                 $data['validEmail'] = $data['givenEmail'];
             }
             
             $this->view->data = $data;
         }
       }

javascript:

Code:

                function emailCheck(element)
             {
                     new Ajax.Request(
                             '/ajax/validate/email',
                             {
                                     method:'post',
                                     parameters:
                                     {
                                             format: 'json',
                                             address: element.value
                                     },
                                    
                                     onLoading: function() { console.info(''); },
                                    
                                     onSuccess: function(transport)
                                     {
                                                console.info('onSuccess');
                                             var response = transport.responseText;
                                             json = response.evalJSON();
                                            
                                               // .data.isValid correspond a l'objet json que j'envoi depuis mon controlleur
                                             if(json.data.isValid == '1')
                                             {
                                                     console.info('is valid ');
                                             }
                                             else
                                             {
                                                    console.info('is not valid');
                                            }
                                     },
                                    
                                     onFailure: function()
                                     {
                                             console.info('onFailure');
                                     }
                                    
                             }
                     );
             }

et dans une vue:

Code:

<input type="text" onchange="emailCheck(this);" value="entrer un email">

voila la il y a de quoi décortiquer et faire un ti test ,  tu devrais y arriver
c'est 1 méthode, je suppose qu'il est tjr possible de faire mieux ou d'une autre manière.

Dernière modification par lethak (28-08-2008 01:47:51)


IT Dev @Twitter

Hors ligne

 

#3 28-08-2008 07:42:02

grandlap
Membre
Date d'inscription: 22-07-2008
Messages: 50

Re: Difficulté pour faire de l'Ajax propremement

Bonjour,

il faut utiliser AjaxContext dans ton contrôleur comme le dit lethak, ça permet de lui indiquer que telle action attend une requête ajax et retourne du json. Y'a un bon exemple dans la doc et c'est très pratique.

Hors ligne

 

#4 28-08-2008 09:27:07

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Re: Difficulté pour faire de l'Ajax propremement

Merci pour vos réponses aussi rapides!

Je vais essayer ce morceau de code mais pourrais tu m'expliquer un peu plus en détail je pense que ça me servira à moi comme à d'autres car j'ai pas vraiment trouvé de tuto simple sur AJAX après quelques recherches. Sinon à quel endroit de la doc on a un exemple simple? Merci encore!


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#5 28-08-2008 11:05:50

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: Difficulté pour faire de l'Ajax propremement

il faut un peut chercher a comprendre par toi même car sinon tu n'y arrivera pas aussi bien au final.

http://framework.zend.com/manual/fr/zen … .http.ajax

http://framework.zend.com/manual/fr/zen … textswitch

bonne lecture wink


IT Dev @Twitter

Hors ligne

 

#6 28-08-2008 12:45:30

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Re: Difficulté pour faire de l'Ajax propremement

Merci j'ai bien relu et j'ai compris pas mal de choses, je commence à coder on verra ce que ça donne wink


Il n'y a qu'en faisant des erreurs qu'on apprend...

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