responseXML sempre nullo

Sto usando firefox 3.6.10 e firebug per il debug

Quindi, ecco il mio codice:

var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", url,false); xmlhttp.setRequestHeader('Content-Type', 'text/xml'); xmlhttp.send(null); alert(xmlhttp.responseXML); 

responseXML è sempre nullo e l’ho provato su diversi URL di domini diversi. Ho anche provato in modo asincrono, è lo stesso risultato. Il responseText è sempre correttamente restituito, senza problemi con esso.

Il mio objective è ottenere la rispostaXML.documentElement .

Grazie per l’aiuto.

MODIFICARE———–
Questo codice javascript è stato eseguito da un userscript di Greasemonkey, ho fatto in modo che fosse la stessa origine dell’URL richiesto. Inoltre ho provato a eseguire da firebug console, assicurando nuovamente la politica di origine. Lo stesso errore su entrambi.
Devi odiare javascript.

Scommetto che stai violando la stessa politica di origine.

Per gli XHR, è necessario avere lo stesso protocollo, dominio, porta, ecc. Quindi, se si sta eseguendo un’app su localhost: 8080 / app, NON si può effettuare ajax su http://www.cnn.com.

Browser diversi gestiscono questo in modo diverso; Ho visto FF fare quello che descrivi, che è la richiesta sembra tornare normalmente ma non ci sono dati …

Oltre ai problemi interdominio già citati, responseXML richiede XML completamente valido e probabilmente il Content-Type corretto nelle intestazioni di risposta inviate dal server. È molto improbabile che uno di questi requisiti sia soddisfatto dal sito web medio.

Per quest’ultimo problema, puoi usare

 xmlhttp.overrideMimeType('application/xml'); 

prima di inviare la richiesta per forzare la risposta ad essere interpolata come XML. Tuttavia, se la risposta non è un XML valido, si otterrà solo null .

Se ricordo correttamente, questo è un problema noto con firefox (ho avuto lo stesso problema prima).

La correzione è di analizzare il responseText in un documento XML e quindi utilizzarlo.

Qualcosa come questo :

 var parser = new DOMParser(); var xmlDoc = parser.parseFromString(xmlhttp.responseText, "application/xml"); 

Prova ad aprire il valore di url direttamente nel browser. Dovresti ottenere alcune informazioni di errore.
Se vedi un errore di analisi, è probabile che la tua codifica sia errata e che il tuo XML abbia un carattere speciale che lo rende non valido.

Per evitare ciò, è necessario essere sicuri che tutta la catena sia correttamente codificata.

Se si tratta di un file XML statico, è necessario impostare correttamente la codifica dell’editor quando lo si salva. La codifica che fa tutto (quasi) è UTF-8, di solito è una proprietà che puoi scegliere nelle impostazioni dell’editor o nella finestra di dialogo di salvataggio.

Se è generato dynamicmente. Anche i tuoi dati, la pagina e la risposta del server devono essere correttamente codificati. E il tuo XML inizia con

Puoi provare prima con un XML molto semplice e statico:

 hi 

E poi aggiungi i passaggi, uno per uno per renderlo simile al tuo, senza romperlo.

Sono stato in giro con questo per ore e finalmente ho capito lo stupido piccolo errore che mi stava incasinando …

Se sei come me, ti piace mantenere il tuo codice JavaScript in un file “.js” esterno.

Pertanto, usando xmlhttp.open (“GET”, “yourxmlfile.xml”, false) cercherà sempre il file XML RELATIVO al documento HTML , anche se il codice si trova in un file JavaScript esterno.

Se responseText restituisce null, non è stato ansible trovare il file locale nel percorso del percorso specificato. E se async è impostato su true, il file verrà creato e il testo di risposta porterà il contenuto di un documento XML vuoto.

Esempio:

xmlDoc = xmlhttp.responseText; // Tipo di dati stringa

  or 

xmlDoc = xmlhttp.responseXML; // Tipo di dati XML

  • folder1 = folder2, index.html.
  • folder2 = index.js, yourxmlfile.xml.
  • percorso XML da HTML = “folder2 / yourxmlfile.xml”, non “yourxmlfile.xml”.

E ricorda di analizzare il documento XML in “text / xml”, dopo l’apertura e prima di inviare la richiesta.

Esempio:

  • xhttp.overrideMimeType ( ‘text / xml’);
  • Chrome: xmlDoc = (nuovo DOMParser ()). ParseFromString (xmlDoc, “text / xml”);

Per me è stato un problema semplice. C’è stato un errore di syntax nel mio file xml / php. Quando ho visto il file nel mio browser, il browser non ha rilevato alcun errore.

Assicurati che gli elementi all’interno del tuo documento XML siano correttamente chiusi!

L’XML malformato di qualsiasi tipo causerà questo problema. Ad esempio, ho avuto un renderer attributo (senza ="something" ) che non è valido e causa il DOMParser , che è chiamato da XMLHTTPRequest . Quindi l’evento di load conterrà la risposta del testo ma non l’XML.