Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour, j'ai créé un formulaire Zend et je souhaiterais valider celui-ci avec l'aide de l'Ajax.
Pour faire cela, j'ai d'abord précisé dans ma méthode init de mon contrôleur, les actions qui sont susceptibles d'utiliser de l'Ajax en faisant ceci:
public function init() { $ajaxContext = $this->_helper->getHelper('AjaxContext'); $ajaxContext->addActionContext('index', 'html') ->addActionContext('add', array('html', 'json')) ->initContext(); if ($this->_request->isXmlHttpRequest()) { $this->_helper->layout->disableLayout(); } }
Dans mon formulaire, j'ai rajouté un attribut onclick à mon bouton submit qui appel une fonction javascript:
$send = new Zend_Form_Element_Submit('send'); $send->setLabel('Envoyer') ->setAttrib('id', 'send') ->setAttrib('onclick', 'return submitForm();');
Voici ce que fait ma méthode javascript appellée:
function submitForm() { alert("coucou"); $.ajax( { url: 'index/add', type: "POST", context: document.ajax, data: { "format" : "html", "nom" : document.getElementById("nom").value, "prenom" : document.getElementById("prenom").value }, error: errorAjax, dataType: "text", success: function(data) { $("#ajax").html(data); } }); }
Et je récupère bien entendu tout ceci dans mon action appelée qui est add():
public function addAction() { $form = new Application_Form_User(); if ($this->_request->isXmlHttpRequest()) { if($this->getRequest()->isPost()) { // si contexte JSON /*if($this->ajaxContext->getCurrentContext() == 'json') { $this->view->result = $form->processAjax($this->request->getPost()); }*/ $formData = $this->getRequest()->getPost(); if ($form->isValid($formData)) { $tableau = array(); $tableau["nom"] = $this->_getParam("nom"); $tableau["prenom"] = $this->_getParam("prenom"); $user = new Application_Model_DbTable_Users; $user->addUser($tableau); }else { $form->populate($formData); } } } $this->view->form = $form; }
Le problème dans tout ceci est quand je clique sur mon bouton submit de mon formulaire, j'ai bien ma popup avec "coucou" qui apparaît et c'est tout, puis ma page se rafraîchit alors qu'elle ne devrait pas mais je ne sais pas pourquoi..
Comment ca se fait svp?
Hors ligne
Bonjour,
Pour moi il s'agit d'un simple problème de javascript : le fait de mettre une action onSubmit fait que l'action est effectuée, puis le scrpt reprends son cours normal et passe donc à l'action du formulaire.
Pour faire simple, tu peux ajouter un return false; à la fin de ton javascript :
[lang=javascript] function submitForm() { alert("coucou"); $.ajax( { url: 'index/add', type: "POST", context: document.ajax, data: { "format" : "html", "nom" : document.getElementById("nom").value, "prenom" : document.getElementById("prenom").value }, error: errorAjax, dataType: "text", success: function(data) { $("#ajax").html(data); } }); return false; }
Il faudra aussi prendre en compte le cas où tu as des erreurs en Ajax...
Hors ligne
J'ai également une fonction javascript que j'ai nommé errorAjax() et qui est appelée lorsqu'il y a une erreur avec l'Ajax.
En rajoutant un return false à la fin de ma fonction javascript, il ne se passe rien, j'ai bien mon "coucou" mais c'est tout, j'ai donc ajouté une autre popup dans le cas de success qui dit "ok" mais je ne la vois pas et ma fonction d'erreur Ajax n'est pas appelée, comment ça se fait?
Hors ligne
Pages: 1