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 :

[XMLHttpRequest] Pourquoi ce code fonctionne sous IE8 et pas sur Firexox 3.0.11


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut [XMLHttpRequest] Pourquoi ce code fonctionne sous IE8 et pas sur Firexox 3.0.11
    Bonjour,

    Je cherche à générer une requête HTTP via du JS pour récupérer le contenu d'une page grâce à un GET. Pour réaliser cela j'utilise XMLHttpRequest avec le code suivant:
    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
    34
    35
    36
    37
    function getXhr()
    {
    			var xhr = null; 
     
    			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 sendTrace()
    		{
    			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){
    					alert(xhr.responseText);
    				}
    			}
    			xhr.open("GET","http://www.unsite.fr",true);
    			xhr.setRequestHeader("Cache-Control","no-cache");
    			xhr.send(null);
    }
    Sous IE8, j'obtiens bien le résultat dans une boite d'alerte alors que sous Firefox, rien du tout.

    Sauriez vous pourquoi et comment y remédier?

    Merci.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Salut,

    ton code ne marche pas sous Firefox car tu utilise un activeX et ceux-ci sont compatibles uniquement avec IE.

    Si tu veux que cela fonctionne sous Firefox, c'est tout expliqué ici (c'est en anglais)

  3. #3
    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
    Citation Envoyé par nesfe Voir le message
    Salut,

    ton code ne marche pas sous Firefox car tu utilise un activeX et ceux-ci sont compatibles uniquement avec IE.

    Si tu veux que cela fonctionne sous Firefox, c'est tout expliqué ici (c'est en anglais)
    Sa fonction getXhr est la version classique qui circule : il utilise de l'activeX avec IE mais du XmlHTTPRequest avec FF, donc non je ne crois pas que ce soit le problème...

  4. #4
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par nesfe Voir le message
    Salut,

    ton code ne marche pas sous Firefox car tu utilise un activeX et ceux-ci sont compatibles uniquement avec IE.

    Si tu veux que cela fonctionne sous Firefox, c'est tout expliqué ici (c'est en anglais)
    Sa fonction getXhr est la version classique qui circule : il utilise de l'activeX avec IE mais du XmlHTTPRequest avec FF, donc non je ne crois pas que ce soit le problème...
    Moi aussi je suis de ton avis! ;-) Surtout qu'en plus je ne reçois pas le message que mon navigateur ne supporte pas l'objet XMLHTTPRequest.

    Serait il possible que cela soit un problème de version? J'ai la 3.0.11 mais ca m'étonnerait.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Effectivement j'avais pas bien vu son code.

    Ceci dit c'est pas une question de version... mais si tu penses que c'est ça, tu peux toujours essayer de télécharger la 3.5 de FF

  6. #6
    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
    Citation Envoyé par homeostasie Voir le message
    ... mais ca m'étonnerait.
    Ca m'étonnerait aussi. ^^

    En termes de débuggage, qu'as-tu déjà essayé ?
    Pistes possibles :

    >>> pendant le temps des tests, "élargir" un peu le champ de ton alert, genre :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    xhr.onreadystatechange = function(){
       // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
       if(xhr.readyState > 1){
          alert(xhr.responseText);
       }
    }
    >>> dans firebug, surveiller le déroulement de la fonction jusqu'au send (notamment la nature et les propriétés de ton xhr)

    >>> peut-être aussi surveiller l'entête avec LiveHTTPHeaders (module complémentaire firefox) pour voir en détail la nature de ce qui est envoyé au serveur

  7. #7
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    >>> dans firebug, surveiller le déroulement de la fonction jusqu'au send (notamment la nature et les propriétés de ton xhr)
    Je ne peux même pas débugger pas à pas mais dans la console je constate que j'ai l'erreur suivante:
    Citation Envoyé par firebug
    Access to restricted URI denied" code: "1012
    xhr.open("GET","http://www.lesite.fr",true);
    Serais ce une option à régler dans firefox pour autoriser ce genre de requête?

  8. #8
    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 640
    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 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    a tester si le get n'attend pas explicitement un fichier et voire même un path relatif ...
    index ?

  9. #9
    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
    Une question me frappe tout à coup (oui je sais ça marche lentement là-dedans ) :

    >>> l'URL que tu appelles via ajax fait-elle partie de ton site ou est-ce une page externe (c'est-à-dire d'un autre site) ?

    Si c'est une page hors de ton site, n'attends même pas ma réponse et fais une petite recherche sur "Same Origin Policy" ^^

  10. #10
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par RomainVALERI Voir le message
    Une question me frappe tout à coup (oui je sais ça marche lentement là-dedans ) :

    >>> l'URL que tu appelles via ajax fait-elle partie de ton site ou est-ce une page externe (c'est-à-dire d'un autre site) ?

    Si c'est une page hors de ton site, n'attends même pas ma réponse et fais une petite recherche sur "Same Origin Policy" ^^
    En fait, au cours de recherche sur l'erreur retournée, j'ai cerné que c'était un problème de domaine différent.

    Mais je vais faire ta petite recherche pour tâcher de mieux comprendre le fonctionnement.

    Il doit surement avoir un moyen d'outrepasser cette restriction de firefox? En tout cas, IE8 est plus cool!

  11. #11
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    En fait les nouvelles versions de navigateurs autorisent dorénavant les requêtes inter-domaines:
    AJAX inter domaines possible avec les nouvelles générations de navigateurs

    Sinon apparemment, il y avait possibilité de faire cela au travers d'IFRAME.

  12. #12
    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
    Citation Envoyé par homeostasie Voir le message
    Il doit surement avoir un moyen d'outrepasser cette restriction de firefox?
    Typiquement, on fait un appel ajax sur son propre serveur, en appelant une page (par exemple php) qui fait l'intermédiaire puisqu'elle n'est pas par définition soumise aux contraintes client : elle requête une base, appelle un webservice, ou quoi que ce soit d'autre, et compose une réponse qu'elle renvoie au poste client qui a fait l'appel ajax de départ... ^^ (ça a l'air un peu lourd comme ça mais ça se fait sans trop de sournoiseries : ça prend juste un peu plus de temps à mettre en place)

    Citation Envoyé par homeostasie Voir le message
    En tout cas, IE8 est plus cool!
    Allez, on va dire que j'ai rien entendu

  13. #13
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par RomainVALERI
    Citation:
    Envoyé par homeostasie Voir le message
    En tout cas, IE8 est plus cool!
    Allez, on va dire que j'ai rien entendu
    On va dire que je me suis mal exprimé... ;-) On dira moins restrictif mais comme Firefox 3.5 autorise aussi ce genre de requête, donc c'est clos.

    Thanks for your explanation!

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/02/2011, 14h45
  2. code fonctionnant sous IE mais pas firefox ni chrome
    Par Hotei dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 04/03/2010, 16h39
  3. Réponses: 1
    Dernier message: 18/11/2009, 13h28
  4. [JMF] Code fonctionnant sous Linux mais pas sous XP
    Par Monsieur_Max dans le forum Multimédia
    Réponses: 4
    Dernier message: 25/05/2006, 18h57

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