未捕获的TypeError:p.appendChild不是函数

时间:2015-05-25 17:59:50

标签: javascript ajax

我正在上Ajax课,这个非常简单的脚本抛出了一个我不明白的错误。我一直收到一个Uncaught Type Error,说appendChild方法不是一个函数。

我正在处理的函数是在单击链接时将文本文件的内容异步加载到'p'标记中。

我对javascript有点新鲜,所以这可能是我错过的一些简单的事情,我很感激你能帮助我理解我做错了什么。

(function(){

var link = document.getElementsByTagName('a')[0];

link.onclick = function(){

    //create xhr object
    var xhr = new XMLHttpRequest();

    // handle the "onreadystatechange" event
    /*
    xhr.readysState property values
    0 = Uninitialized
    1 = Loading
    2 = Loaded
    3 = Interactive - server is sending a response
    4 = Complete
    */
    xhr.onreadystatechange = function() {

        if ( (xhr.readyState == 4) && (xhr.status == 200 || xhr.status == 304) ) {

            xhr.responseText;

            var body = document.getElementsByTagName('body')[0];
            var p = document.getElementsByTagName('p');
            var pText = document.createTextNode(xhr.responseText);

            console.log(p);
            console.log(pText);

            p.appendChild(pText);
            body.appendChild(p);
        }

    };

    // open the request
    /* arguments: 
    1. type of request a (GET or POST) 
    2. path 
    3. asynchronaus request? (true || false)*/
    xhr.open('GET', 'files/ajax.txt', true);  

    // send the request
    xhr.send(null)

    return false; // disable default behavior of link
};

})();

我已经创建了一个jsFiddle来显示我的代码: http://jsfiddle.net/scottm1164/656edjsf/

3 个答案:

答案 0 :(得分:5)

getElementsByTagName返回mysql_real_escape_string。因此,您必须使用索引(如

)访问单个项目
NodeList

它给你的原因

  

p.appendChild不是函数

是因为var p = document.getElementsByTagName('p')[0]; 不是appendChild

类型的函数

答案 1 :(得分:1)

p是一个元素数组。你应该只选一个。在你的小提琴中,你甚至没有1.

答案 2 :(得分:1)

pNodeList;我认为你的意思是document.createElement而不是document.getElementsByTagName

var p = document.createElement('p');