Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 31-10-2012 09:30:44

katsuya
Nouveau membre
Date d'inscription: 14-12-2011
Messages: 6

L'utilisation d'Ajax pour créer un formulaire avec des select liée

Bonjour,

Je doit réalisé dans mon projet un formulaire qui comprend 3 listes liée entre elles.
Dans mon 1er select je doit choisir une province ( jusqu'à tout va bien).
Dans mon second select je doit afficher toutes les villes de la province sélectionné (la ça commence à cafouiller)
Puis dans le 3eme select j'affiche toutes les communes de la ville sélectionné.



J'ai donc créer mon formulaire : Form_ajouter_poste.php

Code:

 [lang=php]
<?php
    Class FormAjouterPoste extends Zend_Form {

    /**
    * Fonction _initForm() : Initialise le formulaire
    *
    */
    public function _initForm()
        //Nom du formulaire
        $this->setName('Formulaire_Ajouter_Poste');        
        
        // Liste des provinces
        $province = new Zend_Form_Element_Select('province');
        $province->setLabel ('Province : ')
        ->addMultiOptions($this->ListeProvince())
        ->setAttrib('id','province')
        ->setOptions(array('onChange' => 'selectVille();'))
        ;

        // Liste des villes
        $ville = new Zend_Form_Element_Select('ville');
        $ville->setLabel ('Ville : ')
        ->setAttrib('id','ville')
        ->addMultiOptions($this->SelectVille())    
        ;

        // Liste des communes
        $commune = new Zend_Form_Element_Select('commune');
        $commune->setLabel ('Commune : ')
        ->setAttrib('id','commune')
        ->addMultiOptions($this->ListeCommune())    
        ;
        
        // le bouton envoi
        $submit = new Zend_Form_Element_Submit('Ajouter');
        $submit    ->setLabel('Ajouter')
        ->setAttrib('class','bouton')
        ->setDecorators(array('ViewHelper',array(array('td' => 'HtmlTag'), array('tag' => 'td', 'colspan' => 2)),array(array('tr' => 'HtmlTag'), array('tag' => 'tr'))));
        
    
        //On ajoute les élèments au formulaire
        $this->addElements(array(
        $province,
        $ville,
        $commune,                        
        $submit
        ));
        
    }
    
    /**
    * Fonction SelectVille() : Affiche les villes en fonction de la province sélectionnée
    *
    */    
    public function SelectVille()
    {
        //Initialisation des models
        $BureauVilleModel = new BureauVilleModel(); // Model Ville

        //On récupere l'idprovince envoyer en ajax
        if(isset($_REQUEST["idprovince"])){
            $id = $_REQUEST["idprovince"];
            $Villes = $BureauVilleModel->getVilleProvince( $id );
        }else{
            $Villes = $BureauVilleModel->selectData();
        }

        //On remplit la liste
        $ListeVille = array();
        $ListeVille[""] = "-- Choisissez --"; 
        foreach ($Villes as $Ville) {
            
            $ListeVille[$Ville->ville_id] = $Ville->ville_nom;            
        }

        return $ListeVille;

    }
    
}

Dans mon controller j'affiche le javascript suivant (appeler lorsque je choisit une province) :

Code:

 [lang=javascript]    <script language="Javascript">
            var xhr = null; 

            function getXhr(){
                if(window.XMLHttpRequest) // Firefox et autres
                xhr = new XMLHttpRequest(); 
                else if(window.ActiveXObject){ // Internet Explorer 
                    try {
                        xhr = new ActiveXObject("Msxml2.XMLHTTP");
                    } catch (e) {
                        xhr = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                }
                else { // XMLHttpRequest non supporté par le navigateur 
                    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
                    xhr = false; 
                } 
            }

            /**
            * Méthode selectVille : s'execute une fois la province choisit
            */
            function selectVille(){
                getXhr();
                //Aprés réponse
                xhr.onreadystatechange = function(){
                    // On vérifie que l'on à reçu quelque chose
                    if(xhr.readyState == 4 && xhr.status == 200){
                        leselect = xhr.responseText;
                        // on ajoute les options à la liste
                        document.getElementById('ville').innerHTML = leselect;
                    }
                }

                // On indique ou la requête Ajax sera effectuée, et via quelle méthode
                xhr.open("POST","poste.phtml",true);
                xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                // on ajoute les arguments à envoyer
                sel = document.getElementById('province');
                idprovince = sel.options[sel.selectedIndex].value;
                // on envoit la requete
                xhr.send("id_province="+idprovince);
            }

            </script>

Dans mon formulaire, lorsque je choisit une province, mon champ ville se vide et du coupe je n'ai rien qui s'affiche.

J'ai fait un var_dump($_REQUEST) mais il ne reçoit rien du tout.

Quelqu'un à une idée  ? Merci

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