“getElementById not a function” when trying to parse an AJAX response?

后端 未结 3 629
死守一世寂寞
死守一世寂寞 2020-11-29 10:36

I\'m running GM_xmlhttpRequest (in a Greasemonkey script) and storing the responseText into a newly created HTML element:

var respo         


        
相关标签:
3条回答
  • 2020-11-29 11:31

    getElementById is not a method of HTML elements. It is a method of the document node. As such you can't do:

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

    You can implement your own function to search the DOM by recursively going through children. On newer browsers you can even use the querySelector method. For minimal development you can use libraries like jQuery or sizzle.js (the query engine behind jQuery).

    0 讨论(0)
  • 2020-11-29 11:40

    There is no need to store the response in an element neither use DOMParser()

    Just set the responseType to 'document' and the response will be parsed automatically and stored in the responseXML

    Example:

    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();
    
    0 讨论(0)
  • 2020-11-29 11:42

    Use DOMParser() to convert responseText into a searchable DOM tree.
    Also, your attempts to search/use anything derived from responseText, must occur inside the onload function.

    Use code like this:

    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'));
    }
    


    Of course, also verify that a node with id result_0 is actually in the returned HTML. (Using Firebug, Wireshark, etc.)

    0 讨论(0)
提交回复
热议问题