Javascript &引用;getElementById不是函数;当试图解析AJAX响应时?
我正在运行Javascript &引用;getElementById不是函数;当试图解析AJAX响应时?,javascript,xmlhttprequest,greasemonkey,getelementbyid,gm-xmlhttprequest,Javascript,Xmlhttprequest,Greasemonkey,Getelementbyid,Gm Xmlhttprequest,我正在运行GM\u xmlhttpRequest(在Greasemonkey脚本中)并将responseText存储到新创建的HTML元素中: var responseHTML = document.createElement('HTML'); ... onload: function() { responseHTML.innerHTML = response.responseText; } 然后我试图在responseHTML中找到一个元素: console.log(responseHTM
GM\u xmlhttpRequest
(在Greasemonkey脚本中)并将responseText
存储到新创建的HTML元素中:
var responseHTML = document.createElement('HTML');
...
onload: function() { responseHTML.innerHTML = response.responseText; }
然后我试图在
responseHTML
中找到一个元素:
console.log(responseHTML.getElementsByTagName('div'));
console.log(responseHTML.getElementById('result_0'));
第一个很好,但第二个不行。有什么想法吗?用于将
responseText
转换为可搜索的DOM树。此外,搜索/使用从
responseText
派生的任何内容的尝试必须发生在onload
函数中
使用如下代码:
GM_xmlhttpRequest({
...
onload:parseAJAX_ResponseHTML,
...
} );
函数parseAJAX_ResponseHTML(respObject){
var parser=newdomparser();
var responseDoc=parser.parseFromString(respObject.responseText,“text/html”);
console.log(responseDoc.getElementsByTagName('div');
console.log(responseDoc.getElementById('result_0');
}
当然,还要验证id为
result\u 0
的节点是否在返回的HTML中。(使用Firebug、Wireshark等)用于将responseText
转换为可搜索的DOM树。此外,搜索/使用从
responseText
派生的任何内容的尝试必须发生在onload
函数中
使用如下代码:
GM_xmlhttpRequest({
...
onload:parseAJAX_ResponseHTML,
...
} );
函数parseAJAX_ResponseHTML(respObject){
var parser=newdomparser();
var responseDoc=parser.parseFromString(respObject.responseText,“text/html”);
console.log(responseDoc.getElementsByTagName('div');
console.log(responseDoc.getElementById('result_0');
}
当然,还要验证id为
result\u 0
的节点是否在返回的HTML中。(使用Firebug、Wireshark等)getElementById
不是HTML元素的方法。它是文档节点的一种方法。因此,您不能:
div.getElementById('foo'); // invalid code
通过递归地遍历
子对象
,您可以实现自己的函数来搜索DOM。在较新的浏览器上,您甚至可以使用querySelector
方法。对于最低限度的开发,您可以使用jQuery或sizzle.js(jQuery背后的查询引擎)之类的库。getElementById
不是HTML元素的方法。它是文档节点的一种方法。因此,您不能:
div.getElementById('foo'); // invalid code
通过递归地遍历
子对象
,您可以实现自己的函数来搜索DOM。在较新的浏览器上,您甚至可以使用querySelector
方法。对于最低限度的开发,您可以使用jQuery或sizzle.js(jQuery背后的查询引擎)之类的库。不需要将响应存储在元素中,也不需要使用DOMParser()
只需将responseType设置为“document”,响应将被自动解析并存储在responseXML中
例如:
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();
不需要将响应存储在元素中,也不需要使用DOMParser() 只需将responseType设置为“document”,响应将被自动解析并存储在responseXML中 例如:
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();
他的代码与您的代码工作原理相同:意思是您的代码不工作的原因相同-getElementById不是HTML元素的方法,而是文档的方法。@slebetman:不,我的代码工作,而responseDoc是文档。。。你可以看到,它的工作原理是。(代码仅限于Firefox,这是一个
Greasemonkey
问题,没有问题)。啊,错过了Greasemonkey标签。对不起,谢谢,伙计们。我倾向于避免使用DOMParser,因为我在过去很难让它工作^ ^ ^但不管怎样,我明白为什么它现在不工作了。他的代码和你的代码工作起来一样:意思是你的代码不工作的原因相同-getElementById不是HTML元素的方法,而是文档的方法。@slebetman:不,我的代码确实有效,而responseDoc是一个文档。。。你可以看到,它的工作原理是。(代码仅限于Firefox,这是一个Greasemonkey
问题,没有问题)。啊,错过了Greasemonkey标签。对不起,谢谢,伙计们。我倾向于避开DOMParser,因为我在过去很难让它工作,但不管怎样,我明白为什么它现在不工作了。