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

JavaScript Discussion :

[AJAX] Ajax et Firefox


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut [AJAX] Ajax et Firefox
    Je planche depuis ce matin sur ce problème : sous Firefox (pas testé sous Opéra mais sous IE ça marche) mon formulaire ne prend pas en compte la valeur générée par Ajax dans l'envoi :-(

    Mon formulaire marche très bien puisque IE récupère bien tout en $_POST, mais pas moyen de travailler avec la valeur générée par Ajax, et c'est bien sûr d'elle dont j'ai besoin.

    En fait je fais saisir un code postal et génère une liste déroulante des villes correspondante via Ajax. Dans ce select je récupère la valeur INSEE de la ville selected, mais ça ne passe pas sous Firefox après le submit !

    Ma base de données comporte :
    - code postal
    - code INSEE
    - nom de la commune
    - latitude
    - longitude

    Voici le code de mon "ajax.js" (appelé dans le <input> du code postal par un "onChange=go_ville()", lui-même dans un div dont l'id est bêtement "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
    29
    30
    31
    32
    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; 
    	} 
           return xhr;
    }
     
    function go_ville(){
    	var xhr = getXhr();
    	xhr.onreadystatechange = function(){
    		if(xhr.readyState == 4 && xhr.status == 200){
    			document.getElementById('ajax').innerHTML = xhr.responseText;
    		}
    	}
     
    	xhr.open("POST","communes.php",true);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	idcp = document.getElementById('cp').value;
    	xhr.send("cp="+idcp);
    }
    Et voici le code de ma page "commune.php" appelée par l'Ajax, dans lequel on trouve la requête et l'affichage de la liste déroulante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?
    echo "<select name=\"ville\" class=\"champ\" style=\"width:145px;color:black\">\n";
    if ($_POST[cp]){
    include("connex.php");
    $res=mysql_query("SELECT insee,commune FROM communes WHERE code='$_POST[cp]' ORDER BY commune");
    while($row=mysql_fetch_row($res)) {
    echo "<option value=\"$row[0]\">".stripslashes(utf8_encode($row[1]))."</option>\n";
    }}
    echo "</select>\n";
    ?>
    HELP !!!!

    NB : mon site en cours de développement se trouve à l'adresse www.lokalokaz.fr

  2. #2
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    C'est un peu le problème avec l'utilisation d'innerHTML pour "remplir" des éléments au retour d'un traitement ajax : le DOM n'est toujours impacté de la même façon après ce type d'ajout, selon les navigateurs (et/ou versions de ces navigateurs comme d'habitude bien entendu ^^)

    Il serait probablement plus fiable de reconstruire tes éléments dans une fonction javascript récupérant ton responseText ( à base de document.createElement(), appendChild(), setAttribute(), et toute la clique ^^)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Merci Romain.
    Cependant ton post est peu compréhensible par mes maigres compétences en Javascript (et pire encore en Java) :-(
    Aurais-tu une réponse plus constructive éventuellement ?
    J'entends par là une "autopsie" de mon code par exemple ;-)

  4. #4
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    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
    29
     
    function go_ville(){
       var xhr = getXhr();
     
       xhr.open("POST","communes.php",true);
       xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
       idcp = document.getElementById('cp').value;
     
       xhr.onreadystatechange = function(){
          if (xhr.readyState == 4 && xhr.status == 200){
             // tu récupères la référence à ton élément de rattachement dans la page ( ici le div ajax ) 
             var elem_ajax = document.getElementById('ajax');
             // tu crées un <select>
             var elem_select = document.createElement("select");
             // tu le rattaches dans l'arbre DOM comme fils de l'élément récupéré plus haut
             elem_ajax.appendChild(elem_select);
             // tu lui donnes ses attributs (si certains étaient dynamiques, tu les passerais dans "xhr.responseText" ) 
             elem_select.setAttribute("name","ville",0);
             elem_select.setAttribute("class","champ",0);
             elem_select.setAttribute("style","width:145px;color:black",0);
             // même chose pour chaque autre élément...
             var elem_option = document.createElement("option");
             elem_select.appendChild(elem_option);
             // etc... ^^
     
          }
       }
       xhr.send("cp="+idcp);
    }
    Je ne suis pas allé jusqu'au bout c'était pour te donner un exemple plus concret de ce dont je voulais parler...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Merci encore,
    Effectivement les choses sont plus claires ainsi pour moi !
    Je ne saurai finir ce code puisque peu à l'aise en Javascript, mais en bidouillant je pense y arriver.
    D'ici là, puisque tu as tous les éléments en main, si tu as 5 minutes à tuer...
    Je te revaudrai ça ;-)

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    et le code html ne tient pas la route ...

    il ne faut pas mettre un table dans un form et encore moins imbriquer les balises table et form suivi de tr ...
    ce qui explique sans doute pourquoi le DOM ne retrouve pas ses petits

    Pour ce qui est de la création d'élement de formulaire en retour d'ajax, en effet il faut se contenter de recupérer du string et ne pas vouloir l'utiliser directement comme du code html
    J'ai mis un post dans les contributions à ce sujet:
    http://www.developpez.net/forums/d53...ynamique-form/

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Merci pour ta réponse...

    Mais là je n'en peux plus. Je n'ai JAMAIS rencontré de pb en imbriquant FORM et TABLE de la sorte (je l'ai même fait pour éviter d'autres soucis) !

    Et pour résoudre mon tout petit problème sous FFX, tu sous-entends qu'il me faut revoir la globalité de mon code ?! Je ne peux pas simplement modifier le HTML ou le AJAX ? Voire le CSS...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Oh la vache !!!
    J'ai simplement sorti mon FORM du TABLE et ça marche !!!
    Non mais c'est dingue... ma plus grosse hallu en près de 10 ans !

    Merci la grenouille, c'est quand même grâce à toi !
    Jamais ne se serais allé retoucher au HTML en fait.

    Bref.

    Pendant que j'y suis, je rencontre un autre pr#bl##e ces derniers temps, mais il s'agit de compatibilité entre DOCTYPE et CSS. Toujours sur ce site www.lokalokaz.fr, tu remarqueras que mes champs de "recherche rapide" sont parfaitement alignés sous FFX, mais sous IE (cette fois) tout part en vrille !
    Et encore là j'ai viré le DOCTYPE mais si je le remets, il ajoute 4px à chaque INPUT alors qu'il ne touche pas à mes SELECT...

    Si qqn a une solution...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] ajax.autocompleter cache firefox
    Par damjal dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/09/2007, 17h43
  2. [AJAX] ajax IE pas FireFox..?
    Par Alex35 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/05/2007, 09h21
  3. [AJAX] AJAX ou Firefox ?
    Par stela86 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/04/2006, 11h32
  4. [AJAX] Ajax IE vs Firefox ?
    Par lezard dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/04/2006, 14h41
  5. [AJAX] AJAX en local (firefox /wamp)
    Par Space Cowboy dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/03/2006, 12h05

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