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

AJAX Discussion :

[AJAX] XMLHttpRequest et Chrome


Sujet :

AJAX

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    525
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 525
    Points : 212
    Points
    212
    Par défaut [AJAX] XMLHttpRequest et Chrome
    Bonjour,

    J'ai un souci avec un script XMLHttpRequest et le navigateur Chrome :
    La requête au module php s'exécute bien (le mail est envoyé par sendcontact.php), mais je n'ai ni message d'attente (normalement chargé dans une div, ni de message de retour avec Chrome...
    Tout fonctionne bien avec IE et FF, mais impossible avec Chrome !

    Pouvez vous me venir en aide ?
    Merci d'avance.

    Voici quelques lignes de script :

    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
    function getXMLHttpRequest() { 
      var xhr = null; 
      if(window.XMLHttpRequest || window.ActiveXObject) { 
        if(window.ActiveXObject) { 
          try { 
            xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
          } catch(e) { 
            xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
          } 
        } else { 
          xhr = new XMLHttpRequest(); 
        } 
      } else { 
        alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest..."); 
        return null; 
      } 
      return xhr; 
    }
    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
    33
    function sendData_contact() { 
    //
      var xhr = getXMLHttpRequest(); 
      if(xhr && xhr.readyState != 0) { 
        xhr.abort();  
      } 
      xhr.onreadystatechange = function() { 
     	var loading = document.getElementById('loading');
        if(xhr.readyState == 4) {
          if (xhr.status != 200) { 
            loading.innerHTML = "<p>Erreur</p>"; 
          }
          else {
          	loading.innerHTML = xhr.responseText;
          }
        }
        else  { 
          loading.innerHTML = 'Veuillez patienter, s.v.p<br><b>Envoi de votre message en cours ...</b><br><img src="/Fichiers/loading/loading.gif" alt="">'; 
        } 
      }
      var Params=""
      var i=0;
      var Elt;
      while (Elt=document.forms['post'].elements[i] ){
     		if(Elt.value && Elt.type!='submit'){Params+="&"+Elt.name+"="+Elt.value;}
     		i++;
     	}
      Params=Params.replace(/^&/,"")
    //
      xhr.open("POST", "../sendcontact.php", true); 
      xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
      xhr.send(Params);
    }
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?
    echo'<div id="loading" align="center"><center>';
    ...
    ...... reste du formulaire
    echo'</center></div>';
    ?>

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Bonsoir !

    Je ne vois pas en quoi ce problème se produirait uniquement sous Chrome, mais je vois déjà quelques faiblesses dans la conception.

    Premièrement, tu ne peux pas mettre ta <div> de chargement dans la réponse envoyée par le serveur. Pour reformuler, tu as besoin que la réponse ait chargé pour afficher les éléments indiquant que la réponse est en train de charger… Tu me suis ?

    Autre problème, ce getElementById appelé dès le début de la fonction onreadystatechange. Tu ne peux pas obtenir la référence à ton élément "loading" avant que tout son contenu ait chargé, car la balise de fermeture </div> est à la fin. Et en plus, tu ne l'insères pas dans le DOM. Ça ne se fait pas tout seul ! Un XMLHttpRequest se contente d'aller chercher du texte sur le serveur, que ce soit du code HTML ou autre, à toi de faire le reste.
    Ce qu'il te faut, c'est un élément "loading" déjà présent dans ta page. Il reste affiché tant que le readyState n'est pas à 4, et ensuite tu le masques, tu le supprimes ou tu le remplaces par le contenu reçu.


    Sinon, un détail non essentiel : avec la fin prochaine du support de Windows XP, je pense (que quelqu'un me corrige si je me trompe) qu'on peut arrêter de s'emms'ennuyer avec les ActiveX. IE7 connaît l'objet XMLHttpRequest et je crois que c'est la version minimale d'IE sous Vista.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    525
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 525
    Points : 212
    Points
    212
    Par défaut
    Bonjour,

    J'ai résolu mon problème :
    Il manquait un "return false;" dans une fonction de nivau supérieur, après l'appel à "sendData_contact();"
    Chrome ne passe pas ce manquement, et visiblement, IE et FF ne sont pas gênés par ce "détail" de programmation Javascript ...

    Merci encore !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/12/2012, 10h57
  2. Réponses: 1
    Dernier message: 29/03/2012, 09h57
  3. [ajax] XMLHttpRequest et formulaire(<input type='file'>)
    Par Are-no dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/08/2006, 20h22
  4. [AJAX] XMLHTTPREQUEST ne se met pas à jour :-/
    Par franckarts dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/08/2006, 18h11
  5. [AJAX] XMLHttpRequest en parallèle
    Par narkhor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/07/2006, 09h57

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