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] Mauvaise éxecution d'Ajax sous IE seulement ?!?!


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2005
    Messages : 144
    Points : 70
    Points
    70
    Par défaut [AJAX] Mauvaise éxecution d'Ajax sous IE seulement ?!?!
    Bonsoir tout le monde, je poste alors que c'est la fin de ma journée, je répondrai donc surement demain.

    Je suis en train de développer un moteur de recherche de vêtements avec des cases à cocher. J'y joins de l'Ajax pour qu'à chaque action du client sur les checkboxs de choix des critères, une requête soit envoyé au serveur pour mettre à jour un champ avec le nombre d'articles correspondant à la requête.

    Cela marche très bien sous FF, mais sous IE (6 et 7), l'appel marche une fois puis il me retourne ensuite toujours pareil.

    En fait, je sais qu'il est appelé à chaque fois puisqu'en remplaçant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('nb_resultat_recherche').innerHTML = xmlHttp.responseText;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(xmlHttp.responseText);
    la fenêtre d'alerte JS apparait tout le temps mais avec tout le temps le même résultat (le premier).

    Voici donc le code source :

    la fonction 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
          // creation du pont entre JS et PHP (pour l'AJAX)
          function GetXmlHttpObject() { 
            var objXMLHttp = null;
            if (window.XMLHttpRequest) objXMLHttp=new XMLHttpRequest();
            else if (window.ActiveXObject) objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
            return objXMLHttp;
          }
     
          // ajax pour la mise a jour de la liste des categories quand on choisit une marque dans le menu de recherche rapide
     
          function rechArticle(form) {
              xmlHttp = GetXmlHttpObject();
              if (xmlHttp == null) {
                  alert("Votre navigateur ne supporte pas les requêtes HTTP.");
                  return false;
              }
              var url="recherche_ajax.php"; // le script à appeller
              // fonction à exécuter dès réception de la réponse
              xmlHttp.onreadystatechange = function(){
                  if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
                  document.getElementById('nb_resultat_recherche').innerHTML = xmlHttp.responseText; //on affiche ce que le serveur renvoie
                  //alert(xmlHttp.responseText);
              }
              xmlHttp.open("GET", url, true);//envoi en GET asynchrone
              xmlHttp.send(null);
              return true;
          }
    l'appel de cette fonction se fait sur le onclick sur chaque checkbox du formulaire

    et voici le bout de PHP qui me retourne le nombre d'articles (c'est aléatoire pour le moment, en attendant que je construise la vraie requête)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
      $nb = rand(0,200);
      echo $nb;
    ?>
    tout ce qu'il y a de plus simple donc...

    Voila, vous pouvez voir la page en construction ici...

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2005
    Messages : 144
    Points : 70
    Points
    70
    Par défaut
    Bon, désolé de remettre ça mais j'ai vraiment pas d'explications au problème... Si quelqu'un a déjà eu ce genre de souci, qu'il n'hésite pas à m'en parler, ça m'empêche d'avancer, tout simplement...

    PS : en appelant directement dans mon navigateur le script recherche_ajax.php, qui me renvoit le nombre aléatoire, j'obtiens l'effet voulu, que ce soit sous FF ou IE (6 et 7). Le problème vient donc bien de l'AJAX ?!?!

    PS 2 : le bloc que je mets à jour n'est pas un div mais un span... Cela ne pose pas de problèmes à Firefox, mais peut-être à IE...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2005
    Messages : 144
    Points : 70
    Points
    70
    Par défaut
    J'ai l'impression que IE garde quelque part en cache le résultat du premier appel AJAX. En effet, si je rafraichis ma page en faisant Ctrl+F5 (pour vider le cache en même temps ), le résultat dans mon span (j'en profite pour dire que span ou div, c'est pareil) change au nouveau premier clic sur une des checkboxs...

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var url="recherche_ajax.php"; // le script à appeller
    Ajoute un timestamp à la suite de url (par exemple avec new Date()) pour éviter de récupérer ce qui est dans le cache.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Et comme ca :

    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
          // ajax pour la mise a jour de la liste des categories quand on choisit une marque dans le menu de recherche rapide
     
          function rechArticle(form) {
              xmlHttp = GetXmlHttpObject();
              if (xmlHttp == null) {
                  alert("Votre navigateur ne supporte pas les requêtes HTTP.");
                  return false;
              }
              var url="recherche_ajax.php"; // le script à appeller
    xmlHttp.open("GET", url, true);//envoi en GET asynchrone
              xmlHttp.send(null);
              return true;
              // fonction à exécuter dès réception de la réponse
              xmlHttp.onreadystatechange = function(){
                  if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
                  document.getElementById('nb_resultat_recherche').innerHTML = xmlHttp.responseText; //on affiche ce que le serveur renvoie
                  //alert(xmlHttp.responseText);
              }
     
          }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2005
    Messages : 144
    Points : 70
    Points
    70
    Par défaut
    Katachana... j'ai regardé ta solution... tu as seulement changé l'ordre du code à l'intérieur de la fonction... J'avais déjà trouvé cette solution sur je ne sais plus quel blog.. Elle ne change rien à mon problème..

    Par contre, Bovino, ta solution peut marcher, seulement je ne vois pas trop comment la mettre en oeuvre.. Ou doit ajouter le timestamp, et comment cela se présente...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2005
    Messages : 144
    Points : 70
    Points
    70
    Par défaut
    Je ne sais pas si c'est à ça que tu pensais Bovino... mais voila le code :

    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
          function rechNbArt(form)
          {
          // on crée le pont entre JS et PHP
            xmlHttp = GetXmlHttpObject();
            if (xmlHttp == null) {
                alert("Votre navigateur ne supporte pas les requêtes HTTP.");
                return false;
            }
          // on crée les listes de paramètres pour la requête
            var url="recherche_ajax.php"; // le script à appeller
            var datee = new Date();
          // fonction à exécuter dès réception de la réponse
            xmlHttp.onreadystatechange = function(){
                if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
                document.getElementById('nb_resultat_recherche').innerHTML = xmlHttp.responseText; //on affiche ce que le serveur renvoie
                //alert(xmlHttp.responseText);
            }
          // envoi de la requête au serveur
            xmlHttp.open("GET", url, true);//envoi en GET asynchrone
            xmlHttp.send(null);
            return true;
          }
    Ca en change rien non plus...

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ben non, là ton Date() ne sert à rien, il faut l'ajouter à l'URL pour que IE ne cherche pas dans le cache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var url="recherche_ajax.php"; // le script à appeller
            var datee = new Date();
            url +=datee;
          // fonction à exécuter dès réception de la réponse
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2005
    Messages : 144
    Points : 70
    Points
    70
    Par défaut
    OK... c'est vrai que je me demandai aussi a quoi ça pouvait bien servir... Mais bon comme j'ai plus aucune idée.. Je crois que t'aurais pu me dire n'importe quoi, j'aurai bu tes paroles comme un pilier de bar descend ses demis...

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    C'est parceque je suis un pilier de bar que tu dis ça ??? Tu me connais ??? C'est toi Pierrot ?
    Blague à part, ça marche ou pas ? ( quand même)
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2005
    Messages : 144
    Points : 70
    Points
    70
    Par défaut
    Hourra... alors je comprends toujours pas...

    Sa marche bien avec ce que tu m'as filé.... Seulement, c'est pas la première fois que j'utilise cette fonction pour faire de l'AJAX, mais c'est la première fois que je rencontre ce problème bizarre..

    SI quelqu'un a une explication je suis preneur..

    Et sinon, je vous mets quand même le code final (qui marche donc sous IE 6 et 7, en plus des autres navigateurs) :
    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
          // ajax pour aller chercher le nombre d'articles correspondant aux critères choisis
          function rechNbArt(form)
          {
          // on crée le pont entre JS et PHP
            xmlHttp = GetXmlHttpObject();
            if (xmlHttp == null) {
                alert("Votre navigateur ne supporte pas les requêtes HTTP.");
                return false;
            }
          // on crée les listes de paramètres pour la requête (la date sert a rafraichir le cache de IE, encore lui, qui fait chier...)
            var datee = new Date();
            var dataa = datee.getFullYear() + "-" + datee.getMonth() + "-" + datee.getDate() + "-" + datee.getHours() + "-" + datee.getMinutes() + "-" + datee.getSeconds() + "-" + datee.getMilliseconds();
            var url="recherche_ajax.php?date=" + dataa; // le script à appeller
          // fonction à exécuter dès réception de la réponse
            xmlHttp.onreadystatechange = function(){
                if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
                document.getElementById('nb_resultat_recherche').innerHTML = xmlHttp.responseText; //on affiche ce que le serveur renvoie
                //alert(xmlHttp.responseText);
            }
          // envoi de la requête au serveur
            xmlHttp.open("GET", url, true);//envoi en GET asynchrone
            xmlHttp.send(null);
            return true;
          }
    Edit à 17h02 : désolé Bovino, fallait pas le prendre pour toi... Je dis ça parce que je m'y connais en pilier de bar, même si je suis plus spécialiste des pintes que des demis...

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

Discussions similaires

  1. [AJAX] [Xajax] Code Xajax fonctionne sous FF, pas sous IE
    Par lemondaf dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/07/2007, 22h10
  2. [AJAX] [Intéressant à savoir!] Comportement étrange sous IE
    Par webrider dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/03/2007, 18h07
  3. [AJAX] Ajax et XmlHttpRequest (marche pas sous IE)
    Par krovomi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/03/2007, 16h39
  4. [AJAX] Récuperation de variable POST sous Firefox
    Par Phenomenium dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/11/2006, 15h22
  5. [AJAX] : pb en communication Synchrone sous Firefox !
    Par Foub dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/08/2006, 17h32

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