Newsgroup: it.comp.lang.javascript
Titolo: parsing XMLHttpRequest with querySelectorAll

Quando uso XMLHttpRequest() con un feed rss lo passo esplorare con 
res.responseXML.documentElement.querySelectorAll.
Se invece carico una pagina html non funziona, penso perch� non � un 
file xml valido.
Ma come faccio ad usare querySelectorAll su una pagina html caricata in 
memoria tramite  XMLHttpRequest?

Corset ha scritto quanto segue il 12/01/2013 13.14>

semplice:
var doc = document.createElement("div");
doc.innerHTML = res.responseText;

 memoria tramite  XMLHttpRequest?
 
La domanda potrebbe quindi essere tradotta in: "come faccio ad avere un
documento HTML valido, tramite XMLHttpRequest?"
 
Laddove supportato correttamente, la cosa migliore � usare `responseType`:
 
 
    var http = new XMLHttpRequest();
 
    http.open("GET", "page.html");
    http.responseType = "document";
 
    http.onload = function () {
      var divs = http.responseXML.querySelectorAll("div");
      alert(divs.length);
    }
 
    http.send();
 
Se non � un documento completo va anche bene creare un nodo al volo, a
quel punto potrebbe essere consigliato un `DocumentFragment`, per�
(
https://developer.mozilla.org/en-US/docs/DOM/DocumentFragment
).
 
Alternativamente, puoi anche usare `createHTMLdocument`
(
https://developer.mozilla.org/en-US/docs/DOM/DOMImplementation.createHTMLDocument
)
se hai comunque bisogno di un documento completo; ed inserire nel
`body.innerHTML` il `responseText`, facendo attenzione a prendere
esattamente il contenuto del body tramite regexp, in modo da non avere
roba spuria.
 
 

Con FF sto usando XMLHttpRequest con responseType = "document" per 
scaricare una pagina html.
Ma mi arriva troncata a circa 10K.
Come mai? � un limite inoltrepassabile?

 Come mai? 
 
Non mi risulta, pu� darsi quindi che possa dipendere in qualche modo dal
server, o dalla combinazione server / client.
 
Eseguendo dalla web console o dallo scratchpad di Firefox questo codice:
 
    var http = new XMLHttpRequest();
 
    http.open("GET", window.location.href);
    http.responseType = "document";
 
    http.onload = function () {
        console.log(http.responseXML.documentElement.innerHTML)
    }
 
    http.send();
 
Ottengo la pagina completa, anche su documenti superiori ai 10K, come ad
esempio lo stesso:
https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest
 
 
Verifica innanzitutto che anche tu ottenga lo stesso risultato; ed in
caso negativo fornisci una pagina dove tale codice eseguito da web
console / scratchpad "tronchi" il documento, in modo da poter replicare
tale comportamento.
 

 >          console.log(http.responseXML.documentElement.innerHTML)
 
indagando meglio ho notato che il problema si presentava con:
alert(http.responseXML.documentElement.innerHTML);
mentre con
document.write(http.responseXML.documentElement.innerHTML);
funzionava normalmente.
a proposito, ma console.log funziona con la Web Console di Firefox?
da addons non visualizzo niente e da riga di comando mi da "undefined"

 e da riga di comando mi da "undefined"
 
E cosa intendi "da riga di comando"?
 

 E cosa intendi "da riga di comando"?
da web console

 da web console
 
Vedi su.

 Il ch� significa che il tuo specifico comportamento � anomalo.
Non funziona anche in modalit� provvisoria!?!

 Non funziona anche in modalitï¿½ provvisoria!?!
 
Se ti funzionasse in modalitï¿½ provvisoria, ma non normalmente,
significherebbe che ï¿½ un add-on a modificare il comportamento della web
console.
 
Se, come ho detto, la causa ï¿½ da riscontrarsi nelle pagine che stai
testando, o in un bug di Firefox della tua specifica versione, la
modalitï¿½ provvisoria non c'entra un tubo. Potrebbe ovviamente essere
altro; i miei sono solo esempi.
 
Innanzitutto, hai provato a usare la web console in `about:blank`?
Facendo solo `console.log('Hello')`? Se anche in questo contesto ottieni
solo `undefined`, senza `Hello` prima, allora sicuramente non ï¿½ la
pagina su cui sei a modificarne il comportamento; e rimangono solo
problemi a livello di browser. A quel punto puoi provare a far partire
Firefox con un profilo pulito, cambiare versione di Firefox, etc.
 
Ovviamente sto dando per scontato che il "Logging" della Web Console sia
abilitato: la web console ha quattro pulsanti, "Net", "CSS", "JS" e
"Logging"; che definisco il tipo di informazioni da visualizzare. Se non
ha "Logging" abilitato, ovviamente ogni comando `console.log` ï¿½ sia da
script che da "riga di comando" della web console ï¿½ non verrï¿½ visualizzato.
 

 abilitato
Hai scovato il problema ;)
ï¿½ un piacere consultarsi con te :)