Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-11-2011 13:33:53

Absot
Membre
Date d'inscription: 28-12-2009
Messages: 170
Site web

Valider formulaire Zend avec Ajax

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:

Code:

 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:

Code:

$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:

Code:

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():

Code:

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.. hmm

Comment ca se fait svp?

Hors ligne

 

#2 04-11-2011 13:56:08

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Valider formulaire Zend avec Ajax

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 :

Code:

[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

 

#3 04-11-2011 14:42:30

Absot
Membre
Date d'inscription: 28-12-2009
Messages: 170
Site web

Re: Valider formulaire Zend avec Ajax

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

 

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