responseXML toujours null
Im en utilisant firefox 3.6.10, et firebug pour déboguer
Donc, voici mon code:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url,false);
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.send(null);
alert(xmlhttp.responseXML);
responseXML est toujours nulle, et je l'ai essayé sur plusieurs Url à partir de différents domaines. J'ai aussi essayé en mode asynchrone, c'est le même résultat. Le responseText est toujours retourné correctement, pas de problèmes avec elle.
Mon objectif est d'obtenir le responseXML.documentElement.
Merci pour votre aide.
MODIFIER-----------
Ce code javascript est exécuté à partir d'un script Greasemonkey, j'ai fait surte son de la même origine que l'url demandée. Aussi, j'ai essayé d'exécution à partir de la console de firebug, en assurant à nouveau la politique de l'origine. Même erreur sur les deux.
Dois haine javascript.
OriginalL'auteur WoF_Angel | 2010-09-23
Vous devez vous connecter pour publier un commentaire.
Je parie que vous ne respectez pas la même origine.
Pour XHRs, vous devez avoir le même protocole, le domaine, le port, etc. Donc, si vous exécutez une application sur localhost:8080/app, vous NE pouvez pas l'ajax http://www.cnn.com.
Différents navigateurs gérer cela différemment; j'ai vu des FF faire ce que vous décrivez, ce qui est la demande semble revenir normalement, mais il n'y a pas de données...
Vous avez raison. Il y a quelques solutions de contournement pour ce, je peut les vérifier plus tard.
OriginalL'auteur hvgotcodes
En plus de la croix-domaine des questions déjà mentionnées,
responseXML
nécessite complètement XML valide et probablement le bonContent-Type
dans les en-têtes de réponse envoyé par le serveur. Il est très peu probable que l'une de ces exigences devront être couverts par le moyen du site web.Pour la dernière question, vous pouvez utiliser
avant de vous envoyer la demande à la force de la réponse à interperted comme XML. Si la réponse n'est pas valide XML, vous aurez seulement
null
.Puisque vous utilisez privlidged code de Firefox, consultez cette page: developer.mozilla.org/en/Code_snippets/HTML_to_DOM
Leurs solutions pour l'analyse de l'ensemble d'un document html à dom ne sont pas de travail pour moi. J'utilise greasemonkey, il devrait avoir une certaine influence dans ce. De toute façon, leurs solutions sont complexes, je pourrais essayer de nouveau. Je ferais mieux de commencer à creuser regex.
Malheureusement, overrideMimeType ne peut pas être fait en vba. 🙁
Merci beaucoup! J'ai eu ce problème et à le résoudre.
OriginalL'auteur MooGoo
Si je me souviens bien , c'est un problème connu avec firefox ( j'ai eu le même problème avant ).
La solution est d'analyser le responseText retour à un document XML , puis de les utiliser.
Quelque chose comme ceci :
oui , c'est correct.
À partir de MDC: DOMParser peut être utilisé pour analyser des chaînes et des flux de texte XML. Il ne peut pas être utilisée pour analyser HTML "soupe de tags". Cependant un lien sur cette même page devrait vous diriger dans la bonne direction.
Évidemment : ce que vous essayez de lire doit être correcte XML . C'est le cas, je l'ai utilisé avec. Pas sûr de ce qui se passe dans le cas de XHTML ( même si c'est valide XML , donc ça devrait marcher ).
Apparemment, il n'est pas exact, comme une erreur d'analyse s'est levée.
OriginalL'auteur Kenny
Essayez d'ouvrir la valeur de
url
directement dans le navigateur. Vous devriez obtenir quelques informations sur l'erreur.Si vous voyez une erreur d'analyse, les chances sont que votre encodage est mal et que vous avez un caractère spécial dans votre XML qui le rend invalide.
Pour éviter cela, vous avez besoin pour vous assurer que la chaîne est correctement codé.
Si c'est un statique fichier XML, vous devez définir correctement votre éditeur de codage lors de l'enregistrement. L'encodage qui fait tout(ou presque) est en UTF-8, il est généralement une propriété que vous pouvez choisir dans vos options de l'éditeur ou dans la boîte de dialogue enregistrer.
Si il est généré de façon dynamique. Vos données, la page et la réponse du serveur doit être codé correctement. Et votre XML de départ avec
<?xml version="1.0" encoding="UTF-8"?>
Vous pouvez essayer d'abord avec un très de base et XML statiques:
Puis ajouter les étapes, une par une, pour faire comme les vôtres, sans les casser.
Essayez-le avec la de base XML ci-dessus sur votre localhost pour voir si votre script fonctionne. Et puis tapez l'autre serveur l'url directement dans la barre d'adresse de votre navigateur pour voir ce qu'il se passe. Et puis essayer d'obtenir le codage XML de votre réception depuis le serveur... je me souviens de perdre des heures de prise de SAP génération de moi un document XML et non pas une chaîne jusqu'à ce que j'ai compris c'était à propos de l'encodage. Bonne chance!
OriginalL'auteur Mic
Été dupe autour de heures et, enfin, trouvé le peu stupide erreur a été de me gâcher...
Si vous êtes comme moi, vous voulez garder votre code JavaScript dans un externe ".js" fichier.
À cet effet, à l'aide de xmlhttp.open("GET","yourxmlfile.xml",false) va toujours à la recherche de le fichier XML par rapport à un document HTML, même si le code dans un fichier JavaScript externe.
Si le responseText renvoie la valeur null, le fichier local n'a pas pu être trouvé dans le chemin d'accès spécifié l'emplacement.
Et si async est définie sur true, le fichier sera créé et le texte de la réponse portera le contenu d'un document XML vide.
Exemple:
xmlDoc = xmlhttp.responseText; //Chaîne de caractères type de données
xmlDoc = xmlhttp.responseXML; //type de données XML
Et n'oubliez pas de parser le XML, doc en "text/xml", après ouverture et avant l'envoi de la demande.
Exemple:
OriginalL'auteur CENTRI
Pour moi, c'était un problème simple. Il y avait une erreur de syntaxe dans mon xml/php fichier.
Quand j'ai regardé le fichier dans mon navigateur, le navigateur n'a pas de détecter d'éventuelles erreurs.
assurez-vous que les éléments à l'intérieur de votre document XML bien fermé!
OriginalL'auteur CENTRI
XML mal formé de toute sorte sera la cause de ce problème. Par exemple, j'ai eu un attribut
renderer
(sans="something"
) qui n'est pas valide et les causesDOMParser
- ce qui est appelé parXMLHTTPRequest
- à étouffer. Doncload
événement contiendra le texte de la réponse, mais pas le XML.OriginalL'auteur Arcane Engineer