“GetElementById not a function” cuando intenta analizar una respuesta AJAX?

Estoy ejecutando GM_xmlhttpRequest (en un script de Greasemonkey) y almacenando el texto de responseText en un elemento HTML recién creado:

 var responseHTML = document.createElement('HTML'); ... onload: function() { responseHTML.innerHTML = response.responseText; } 

Y luego estoy tratando de encontrar un elemento en responseHTML :

 console.log(responseHTML.getElementsByTagName('div')); console.log(responseHTML.getElementById('result_0')); 

El primero funciona bien, pero no el segundo. ¿Algunas ideas?

getElementById no es un método de elementos HTML. Es un método del nodo del documento. Como tal, no puedes hacer:

 div.getElementById('foo'); // invalid code 

Puede implementar su propia función para buscar el DOM recurriendo recursivamente a los children . En los navegadores más nuevos, incluso puede usar el método querySelector . Para un desarrollo mínimo, puede usar bibliotecas como jQuery o sizzle.js (el motor de consulta detrás de jQuery).

Utilice DOMParser() para convertir responseText en un árbol de DOM que se puede buscar.
Además, sus bashs de buscar / usar cualquier cosa derivada de responseText , deben ocurrir dentro de la función onload .

Usa un código como este:

 GM_xmlhttpRequest ( { ... onload: parseAJAX_ResponseHTML, ... } ); function parseAJAX_ResponseHTML (respObject) { var parser = new DOMParser (); var responseDoc = parser.parseFromString (respObject.responseText, "text/html"); console.log (responseDoc.getElementsByTagName('div')); console.log (responseDoc.getElementById('result_0')); } 

Por supuesto, también verifique que un nodo con id result_0 esté realmente en el HTML devuelto. (Usando Firebug, Wireshark, etc.)

No es necesario almacenar la respuesta en un elemento ni usar DOMParser ()

Simplemente configure el tipo de respuesta como ‘documento’ y la respuesta se analizará automáticamente y se almacenará en el archivo responseXML

Ejemplo:

 var ajax = new XMLHttpRequest(); ajax.open('get','http://www.taringa.net'); ajax.responseType = 'document'; ajax.onload = function(){ console.log(ajax.responseXML); //And this is a document which may execute getElementById }; ajax.send(); 
Intereting Posts