我正在上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/
答案 0 :(得分:5)
getElementsByTagName返回mysql_real_escape_string
。因此,您必须使用索引(如
NodeList
它给你的原因
p.appendChild不是函数
是因为var p = document.getElementsByTagName('p')[0];
不是appendChild
答案 1 :(得分:1)
p
是一个元素数组。你应该只选一个。在你的小提琴中,你甚至没有1.
答案 2 :(得分:1)
p
是NodeList
;我认为你的意思是document.createElement
而不是document.getElementsByTagName
。
var p = document.createElement('p');