Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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:
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)
Hors ligne
euh je ne comprend pas trop ton bout de code il est ou il est sensé faire quoi ?
ca c'est du javascript:
new Ajax.Request
ca du php:
<? echo $this->baseUrl(); ?>
tu a donc mis ton JS dans une vue ? (pas propre :p )
ok voici une solution qui devrais fonctionner
controlleur:
<?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:
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:
<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)
Hors ligne
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
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!
Hors ligne
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
Hors ligne
Merci j'ai bien relu et j'ai compris pas mal de choses, je commence à coder on verra ce que ça donne
Hors ligne