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] [XHR] Status = 200 avec FF 3.5 et sur un seul PC, 0 dans les autres cas


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut [AJAX] [XHR] Status = 200 avec FF 3.5 et sur un seul PC, 0 dans les autres cas
    Bonjour à tous,

    Je développe actuellement une petite application AJAX en utilisant l'objet XmlHttpRequest. Mon problème est assez étrange: mon code ne semble fonctionner que sur Firefox 3.5 (navigateur que j'utilise pour faire mes tests), mais ce qui est encore plus étrange, c'est que si j'essaye sur une autre machine avec le même navigateur, elle ne marche plus du tout.

    J'ai cerné le problème: cela vient du status de l'objet XHR: le code renvoyé est 200 quand cela fonctionne, et 0 sur les autres navigateurs/machines.

    Voici le code pour générer l'objet 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
    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("Your browser doesnt handle this kind of feature. Please update it and try again.");
    		return null;
    	}
    	return xhr;
    }
    Et voici la fonction qui pose problème (il s'agit d'une fonction d'authentification, c'est la première appellée et je suppose donc que le problème serait le même pour les fonctions suivantes car tous les appels ont la même structure):

    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
    function getToken(pictureId){
       var xhr = getXMLHttpRequest();
     
       xhr.onreadystatechange = function() {
          if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    			alert(xhr.status); //juste pour connaître le statut
    			alert(xhr.responseText); //en théorie appel d'une fonction handler
    		} 
       };
     
       var url = "http://monsite/proxys/auth.php"; //je travaille avec une API d'où nécessité de passer par un proxy (voir plus bas)
     
     
       xhr.open("GET", url, true);
       xhr.setRequestHeader( "Content-type", "text/xml" );
       xhr.send(null);
    }
    Cette application fonctionne en relation avec une API située sur un autre domaine, d'où le besoin de passer par un proxy situé sur mon serveur de manière à contourner les limitations cross-domain. Ce proxy est codé en PHP (utilisant l'extension cURL). Si besoin est je peux poster le code.

    Je ne parviens pas à déterminer d'où le problème peut venir

    Merci beaucoup pour votre aide!

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 209
    Par défaut
    As-tu essayé de contourner le problème de l'url par une balise <iframe> ?
    Car ajax est toujours très réticent en matière de proxy...
    JL

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut
    Je ne suis pas certain de savoir comment utiliser une balise <iframe> pour contourner le problème de l'XHR cross-domain

    Pourrais-tu m'éclairer?
    Merci!

  4. #4
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut
    Après avoir effectué quelques tests, je ne pense pas que le problème vienne du proxy.

    En effet, j'ai remplacé mon proxy par une page "bidon.php" qui contient le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header("Content-Type: text/plain"); 
    echo "YEAH";
    Après avoir changé l'URL d'appel de mon XHR, j'obtiens les mêmes résultats que précédemment, c'est à dire:
    - status = 200 + affichage du message pour Firefox sur mon ordi principal
    - status = 0 + pas de texte du tout sur plusieurs autres configs (OS et navigateurs variables)

    Le problème vient donc du XHR? Si quelqu'un a une idée de où le problème pourrait provenir je suis plus que preneur...

  5. #5
    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 : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.setRequestHeader( "Content-type", "text/xml" );
    Tu es sûr que tu envoies du XML ?
    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

  6. #6
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Par défaut
    Bien vu, malheureusement cette ligne ne figurait pas sur mon code initial et vient en fait de mes recherches google: quelqu'un rencontrant un problème relativement similaire l'avait résolu en ajoutant cette commande.

    Je l'ai enlevée et cela ne change rien au problème

    Voici donc ma fonction actuellement:

    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
    function getToken(pictureId){
       var xhr = getXMLHttpRequest();
     
       xhr.onreadystatechange = function() {
          if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    			alert(xhr.status);
    			alert(xhr.responseText);
    		} 
       };
     
       var url = "http://monsite.com/proxys/test.php";
     
       xhr.open("GET", url, true);
       xhr.send(null);
    }

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

Discussions similaires

  1. [AJAX] xhr.status = 0, Mais pas toujours :~
    Par Terni dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 29/10/2008, 15h12
  2. [AJAX] Ajax xhr.status renvoie 0
    Par cell dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/10/2008, 11h18
  3. [AJAX] xhr.status = 0
    Par Cartman.inc dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/04/2008, 11h23
  4. Réponses: 2
    Dernier message: 06/07/2007, 13h27
  5. [AJAX] AJAX - req.status == 200
    Par julien.63 dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 10/05/2006, 15h59

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