web-dev-qa-db-fra.com

NETWORK_ERROR: XMLHttpRequest Exception 101

Je reçois cette erreur 

NETWORK_ERROR: XMLHttpRequest Exception 101

lorsque vous essayez d’obtenir du contenu XML d’un site. Voici mon code

var xmlhttp; 
if(window.XMLHttpRequest)
        { 
            xmlhttp = new XMLHttpRequest();
        }
         if (xmlhttp==null)
        {
            alert ("Your browser does not support XMLHTTP!");
            return;
        }         

xmlhttp.onReadyStateChange=function() 
        {
                if(xmlhttp.readyState==4)
                {
                var value =xmlhttp.responseXML;
                alert(value);
                }
         } 
        xmlhttp.open("GET",url,false);
        xmlhttp.send();
        //alert(xmlhttp.responseXML);      
     }
xmlhttp.open("GET",url,false);
xmlhttp.send(null);

Quelqu'un a-t-il une solution?

29
pawan Mangal

Si la url que vous fournissez est située à l'extérieur de votre serveur et que celui-ci ne vous a pas autorisé à envoyer de demandes, vous rencontrez des problèmes d'autorisation. Vous ne pouvez pas accéder aux données d'un autre serveur avec une XMLHttpRequest, sans que le serveur vous le permette explicitement. 

Mise à jour: Réalisant que ceci est maintenant visible comme réponse sur Google, j'ai essayé de trouver de la documentation sur cette erreur. C'était étonnamment difficile.

Cet article si, a quelques informations de fond et les étapes à résoudre. Plus précisément, il mentionne cette erreur ici:

XMLHttpRequest fonctionnera tant que le serveur sera configuré pour autoriser les requêtes de votre application Web d'origine. Sinon, une exception INVALID_ACCESS_ERR est renvoyée.

Une interprétation de INVALID_ACCESS_ERR semble être ce que nous examinons ici. 

Pour résoudre ce problème, le serveur qui reçoit la demande doit être configuré pour autoriser l'origine. Ceci est décrit dans plus de détails sur Mozilla .

23

La restriction selon laquelle vous ne pouvez pas accéder aux données d'un autre serveur avec XMLHttpRequest peut s'appliquer même si l'URL implique simplement un serveur distant.

Alors: url = "http://www.myserver.com/webpage.html"  

peut échouer,

mais: url = "/webpage.html"  

réussir - même si la demande provient de www.myserver.com

4
Ian

Demande abandonnée parce qu'elle a été mise en cache ou déjà demandée? Il semble que l'exception XMLHttpRequest 101 error puisse être générée pour plusieurs raisons. J'ai constaté que cela se produit lorsque j'envoie plusieurs fois une XMLHttpRequest avec la même URL. (Changer l'URL en ajoutant un cache éliminant le cache à la fin de l'URL permet à la requête d'être répétée. ).

Ne pas renvoyer le responseText ou responseXML correct en cas de demande répétée est un bogue (probablement webKit). 

Lorsque cette exception s'est produite, j'ai obtenu un événement onload avec readyState == 4 et l'objet de requête state = 0 et responseText == "" et responseXML == null. Il s’agit d’une requête entre domaines que le serveur autorise.

C'était sur un système Android 2.3.5 qui utilise webKit/533.1

Quelqu'un at-il une documentation sur ce que l'exception est censée vouloir dire?

2
Ribo

Quelque chose comme cela m'est arrivé lorsque j'ai renvoyé un XML incorrect (j'ai mis un attribut dans le nœud racine). Au cas où cela aiderait quelqu'un.

2

J'ai trouvé un article très agréable avec 2 solutions différentes. 

  1. Le premier implémentant jQuery et JSONP, expliquant à quel point c'est simple.
  2. La deuxième approche consiste à rediriger vers un appel PHP. Très simple et très agréable. 

http://mayten.com.ar/blog/42-ajax-cross-domain

1
Martin
xmlhttp.open("GET",url, true);

définir la partie asynchrone sur true

1
Lian

Une autre méthode moderne de résolution de ce problème est le partage de ressources d'origine croisée . HTML5 offre cette fonctionnalité. Vous pouvez "encapsuler" votre requête XMLhttp dans cette requête CORS_request et dans Si le navigateur cible prend en charge cette fonctionnalité, vous pouvez l'utiliser sans problèmes.

EDIT: De plus, je dois ajouter qu’il existe de nombreuses raisons qui peuvent causer ce problème .. Non seulement une restriction interdomaine, mais aussi des paramètres erronés dans votre WEB.CONFIG de votre Webservice. 

Exemple IIS (.NET):

Pour activer l'accès HTTP à partir de sources externes (dans mon cas, une application Phonegap compilée avec une demande CORS), vous devez l'ajouter à votre WEB.CONFIG.

    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>

Un autre scénario:

J'ai deux services Web en cours d'exécution ... Un sur le port 80 et un sur le port 90. Cela m'a également donné une erreur de requête HTTP XML. Je ne sais même pas pourquoi :). Néanmoins, je pense que cela peut aider de nombreux lecteurs peu expérimentés. 

0
chriz