Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour, je suis en train de réaliser 2 liste deroulante liées avec ajax.
<li> <label for="offre_pays"> Pays: </label> <select id="pays" name="offre_pays" onchange="go()"> <option selected="selected"> Choisissez un pays </option> <?php foreach ($this->pays as $pays ): ?> <option value="<?php echo $pays->pays_id; ?>"> <?php echo $pays->pays_nom; ?> </option> <?php endforeach; ?> </select> </li> <li> <label for="offre_region">Région:</label> <div id="region" style='display:inline' > <select name="offre_region" > <option value="-1"> Choisir un pays </option> </select> </div> </li>
Donc la première liste déroulante fonctionne bien, mais lorsque je selectionne un pays dans la liste, j'ai cette erreur:
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (public)' in /Zendlib/Zend/Controller/Dispatcher/Standard.php:193 Stack trace: #0 /Zendlib/Zend/Controller/Front.php(911): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 /Etudiant/index.php(43): Zend_Controller_Front->dispatch() #2 {main} thrown in /Zendlib/Zend/Controller/Dispatcher/Standard.php on line 193
Je ne comprend pas...
Voici le js du onchange:
var xhr = getXhr(); // On défini ce qu'on va faire quand on aura la réponse xhr.onreadystatechange = function() { // On ne fait quelque chose que si on a tout reçu et que le serveur est ok if(xhr.readyState == 4 && xhr.status == 200) { leselect = xhr.responseText; // On se sert de innerHTML pour rajouter les options a la liste document.getElementById('region').innerHTML = leselect; } } // Ici on va voir comment faire du post xhr.open("POST",scriptUrl+"ajaxPaysRegion.php",true); // ne pas oublier ça pour le post xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); // ne pas oublier de poster les arguments sel = document.getElementById('pays'); idpays = sel.options[sel.selectedIndex].value; // envoie xhr.send("pays_id="+idpays);
et jaxPaysRegion.php
echo "<select name='offre_region'>"; if(isset($_POST["pays_id"])) { $connection = pg_connect( ... ); $sql = "SELECT region_id, region_nom FROM storegions WHERE pays_id='".$_POST["pays_id"]."';"; $res = pg_query( $connection , $req ); while($data = pg_fetch_array($res)) { echo "<option value='".$data['region_id']."'>".$data['region_nom']."</option>"; } } echo "</select>";
Hors ligne
Bon à priori tu n'a aucune idée du fonctionnement du model MVC, je te conseille de lire le model MVC avant tout.
Bref: tu essayes d'appeler cette url avec ajax: xhr.open("POST",scriptUrl+"ajaxPaysRegion.php",true);
scriptUrl est une variable que tu as définie en principe et d'après l'erreur elle contient le mot "public" ce qui veut dire que ton script js est dans le répertoire public, donc le dispatcher voici ce qu'il va faire, il va essayer d'appeler http://TonHost/rep_application/public/ajaxPaysRegion.php (ce qui correspond à: public est un cotrolleur ou un module dans ton cas c'est un controlleur tu n'utilises pas d'architecture modulaire sinon il t'aurais dis modules "public" :p) et ajaxPaysRegion.php est une action ce qui est faut et qui n'existe pas.
PS: si tu n'utilises pas Zend framework et le modèle MVC enlève le rewrite rule de ton fichier .htaccess
sinon, toutes tes requètes seront redérigé vers le bootstrap(index.php)
Cordialement
Dernière modification par verboz (26-07-2007 05:43:56)
Hors ligne