IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MVC PHP Discussion :

Petit soucis entre Ajax et validation d'un formulaire


Sujet :

MVC PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2002
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2002
    Messages : 62
    Points : 52
    Points
    52
    Par défaut Petit soucis entre Ajax et validation d'un formulaire
    Bonsoir!

    J'ai un léger soucis avec Ajax et mon formulaire et je n'arrive pas à passer l'étape de la validation du formulaire.
    Mon formulaire contient une liste de type select et un bouton rechercher.
    Ma liste contient des dates. Une fois la date choisie, en cliquant sur "rechercher", j'aimerais pouvoir exécuter une action sans recharger la page, tout en récupérant l'élément sélectionné dans la liste.

    Voici mon formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    class Astreinte_Form_DateSelection extends Zend_Form
    {
        public function init()
        {
        	$dateSelect = array();
     
    	// Création de l'instance "astreinte"
            $astreintes = new Astreinte_Model_DbTable_Astreintes();
     
            // Récupération des astreintes pour la page d'accueil
            $rowAstreintes = $astreintes->getAccueilAstreinte();
     
            foreach ($rowAstreintes as $astreinte):
            	$dateSelect[$astreinte->date_debut] = "du " . $astreinte->date_debut . " au " . $astreinte->date_fin;
            endforeach;
     
            $this->setMethod('post');
           	$this->setAction(__URL__ . Zend_Controller_Front::getInstance()->getBaseUrl() . '/astreinte/index/validation');
     
    	$dateRange = new Zend_Form_Element_Select('dateDebut');
            $dateRange->setLabel('Sélectionnez une ou plusieurs dates et lancez la recherche:')
               	  ->addMultiOptions($dateSelect);
     
            $this->addElement($dateRange)
                 ->addElement('submit', 'submitTo', array('label' => 'Rechercher'));           						
        }
    }
    L'initialisation de mon controller s'effectue comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public function init()
    {
            /* Initialize action controller here */
        	parent::init();
        	$models = $this->_request->getParam('module').'/models';
        	set_include_path('../application/modules/'.$models . PATH_SEPARATOR . get_include_path());
     
        	// ajax
        	$ajaxContext = $this->_helper->getHelper('AjaxContext');
        	$ajaxContext->addActionContext('modifier', 'html')
    	            ->addActionContext('validation', array('html', 'json'))
    	            ->initContext();
     
    	//si requete ajax on désactive les layouts
            if($this->_request->isXmlHttpRequest()){
                $this->_helper->layout->disableLayout();    //disable layout for ajax
            }
    }
    Dans mon controller, l'action "modifier" permet d'afficher le formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function modifierAction()
    {
    	$form = new Astreinte_Form_DateSelection();
        	$this->view->formDatesAstreinte = $form;
    }
    et la vue associée contenant le code Ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php echo $this->formDatesAstreinte; ?>
    <div id="contenu"></div>
     
    <script type="text/javascript">
    	//for send data i'll use jquery library
    	$(document).ready(
    		function(){
    			$("#submitTo").click(function() {
    				alert('Coucou');
    				var option = $('#dateDebut option:selected').val();
    				if (option != '') {
    					$.ajax({
    						url:"<?php echo __URL__ . $this->baseUrl();?>/astreinte/index/validation",
    						data:{'dateDebut' : option},
    						type: "POST",
    						dataType: "json",
    						success: function(result){
    							alert(option);
    							alert(result);
    							//$("#contenu").html(result['dateDebut']);         
    						}
    					});
    					return false;
    				}
    			});
    		}
    	);
    </script>
    L'action "validation" est appelée lorsqu'on clique sur le bouton "rechercher" du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public function validationAction()
    {
        	$form = new Astreinte_Form_DateSelection();
     
       	//Vérifie qu'on envoie les infos par POST
            if ($this->_request->isPost()) {
    		if( $form->isValid($_POST))  {
    	    		if (($data = $form->processAjax($_POST))) {
    	                	$this->view->succes = "SUCCES";
    	                	// On désactive le layout
    	                	$this->_helper->layout->disableLayout();
    	                	$this->_helper->json->sendJson($data);
    	            	} else {
    	                	$this->view->succes = "ECHEC";
    	                	$this->_helper->json->sendJson($data);
    	            	}
    	    	} else{
    	    		$this->view->succes = "DEBUT";
    	    	}
            }else {
            	$this->view->succes = "DEBUT";
            }
     
        	$this->view->formDatesAstreinte = $form;
    }
    Sa vue est toute simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo "SUCCES = " . $this->succes; ?>
    Donc une fois que j'appelle l'action "modifier", j'ai bien mon formulaire. Lorsque je choisis une date et que je clique sur le bouton "rechercher", j'exécute bien le code javascript (je le vois grâce à la fonction alert) mais je n'arrive pas à valider mon formulaire du côté de l'action "validation". Comme si le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if ($this->_request->isPost()) {
    était toujours faut.
    Qu'est-ce que j'aurais loupé qui ferait que mon formulaire n'est jamais validé et que je n'arrive pas à récupérer les éléments postés depuis mon formulaire ?
    Merci pour votre aide

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    un truc me paraît bizarre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url:"<?php echo __URL__ . $this->baseUrl();?>/astreinte/index/validation",
    D'où sort la constante __URL__ ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

Discussions similaires

  1. [AJAX] Petit soucis requete AJAX
    Par mitchreward dans le forum AJAX
    Réponses: 2
    Dernier message: 02/03/2013, 11h05
  2. [AJAX] Petit souci avec Ajax qui ne semble pas marcher correctement
    Par gentil2005 dans le forum jQuery
    Réponses: 2
    Dernier message: 25/10/2012, 12h53
  3. Réponses: 1
    Dernier message: 03/02/2012, 15h08
  4. petit soucis avec ajax
    Par playa dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 08/03/2011, 09h47
  5. Réponses: 6
    Dernier message: 21/01/2004, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo