Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour
Dans un formulaire, j'ai 2 champs : Un 1ier champ dans lequel je saisis un code postal, puis un 2nd champ de type SELECT dans laquelle je fais le choix d'une commune correspondante au code postal saisi précédement.
(Il y a en effet 36569 communes en france pour seulement 5962 codes postaux...)
Je souhaite que tout changement dans le 1ier champ Code Postal mette à jour dynamiquement la liste de choix dans le second champ de type SELECT.
je tente d'utiliser AJAX, JQUERY et JSON.
Mon code ne fonctionne pas : Au final, mon champ SELECT se remplit avec des "undefined" partout : exemple
<select id="codeCommune" name="codeCommune">
<option value="undefined">undefined</option>
<option value="undefined">undefined</option>
<option value="undefined">undefined</option>
<option value="undefined">undefined</option>
<option value="undefined">undefined</option>
Qui peut m'aider à identifier mon erreur ?
Voici mon code ci dessous.
*** Script JQUERY dans ma page HTML contenant le formulaire :
$(document).ready(function () {
var urlmonsite = "http://localhost/monsite";
$("input#codePostal").change(function () {
var listeCommunes =
$.ajax({
async : false,
dataType : "json",
url: urlvg + "/ajax/communes/cp/" + $("input#codePostal").val() + "/format/json",
}).responseText;
var options = '';
for( var i = 0; i < listeCommunes.length; i++) {
options += '<option value="' + listeCommunes[i].valeur + '">' + listeCommunes[i].choix + </option>';
}
$("select#codeCommune").append(options);
})
});
*** Fichier controleur AJAX : ajaxController.php
<?php
class ajaxController extends Zend_Controller_Action
{
/**
* Initialisation
*/
public function init()
{
$this->_helper->layout->disableLayout();
}
/**
* Retourne la liste des communes correspondant à un code postal donné, au format JSON
*/
public function communesAction()
{
// ici je vais chercher la liste des communes en fonction du code postal envoyé
// le résultat est un ARRAY identique à :
// $listeCommunes = array(
// array("valeur" => "35236", "choix" => "Redon"),
// array("valeur" => "35013", "choix" => "Bains-sur-Oust"),
// array("valeur" => "35294", "choix" => "Sainte-Marie")
// )
$this->view->reponseAjax = Zend_Json::encode($listeCommunes);
}
}
*** Vue du controleur AJAX :
<?php
echo $this->reponseAjax;
Merci
Dernière modification par zebulon (07-01-2010 00:29:43)
Hors ligne
Personne pour me donner un coup de main ... l'année commence mal.
Pour simplifier et après avoir avancé un peu :
Mon controleur AJAX (ajaxController.php) retourne une réponse.
Selon firebug celle-ci ressemble à un tableau en notation JSON tel que celui-ci :
[{"codeCommune":"35013","nomCommune":"BAINS-SUR-OUST"},{"codeCommune":"35236","nomCommune":"REDON"},{"codeCommune":"35294","nomCommune":"SAINTE-MARIE"}]
Tout semble être ok.
L'en-tête adressée avec cette réponse est :
Date Mon, 04 Jan 2010 22:52:06 GMT Server Apache/2.2.11 (Win32) PHP/5.2.9 X-Powered-By PHP/5.2.9 Expires Thu, 19 Nov 1981 08:52:00 GMT Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma no-cache Content-Length 173 Keep-Alive timeout=5, max=99 Connection Keep-Alive Content-Type text/html Requête Host localhost User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729) Accept application/json, text/javascript, */* Accept-Language fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 300 Connection keep-alive X-Requested-With XMLHttpRequest Referer http://localhost/vg/manifestation/soumettre Cookie PHPSESSID=m4h9ikk572ura03n5abimim995
Par contre, il semble que mon script jQuery soit incapable de traiter la réponse JSON. Le parcours avec un FOR(...){...} est impossible ; et la longueur de la réponse ne donne pas le nombre d'élément dans le tableau, mais un nombre de caractères...
Ou ai-je loupé un truc ?
A l'aide, merci
PS : je m'excuse de n'avoir pas utilisé les BBCodes dans mon premier post.
Hors ligne
Bonjour,
J'utilise pas mal l'ajax avec Zend et je n'ai pas de souci. Ta réponse a l'air correcte, je pense donc aussi que ton problème provient de ton utilisation de jQuery.
Je n'ai jamais utilisé la fonction $.ajax, je préfère la fonction dédiée $.getJSON:
$.getJSON(url, function(data) { for( var i = 0; i < data.length; i++) { alert (data[i].valeur); } });
Voila un exemple de code qui fonctionne chez moi.
Bon courage.
Hors ligne
Merci pour cette réponse
j'ai résolu le pb en utilisant un eval() sur ma réponse AJAX.
Cordialement,
Hors ligne
Pages: 1