我有一个从ajax返回的json对象,当我提醒它时,它显示正确,我尝试将它们添加到无序列表中并将其添加到占位符div,但抛出上述错误..
function handleResponse() {
if(httpa.readyState == 4){
var response = httpa.responseText;
//alert(response);
if(response!='empty')
{
//alert(response);
eval("prod="+response);
var len = prod.length;
var st = "<ul>";
for(var cnt=0;cnt<len;cnt++)
{
st = st + "<li onclick='set("+prod[cnt].id+")'>"+prod[cnt].name+"</li>";
}
st = st + "</ul>";
}
var tt = document.getElementById('holder1');
tt.appendChild(st); // i even tried **tt.appendChild(eval(st));**
tt.style.display = 'block';
}
}
答案 0 :(得分:3)
一些评论:
eval("prod="+response);
- 不要这样做。它创建了一个全局“prod”变量,可以执行任意代码,阻止JS引擎加速代码,并且通常被认为是一种糟糕的编码实践。
tt.appendChild(st); // i even tried **tt.appendChild(eval(st));**
- appendChild
接受DOM节点; st
是一个字符串,eval(st)
评估st
,假设它包含JavaScript代码(因此在XML上运行它会导致语法错误,除非您使用E4X,仍然不会创建适合与appendChild
一起使用的对象。
innerHTML
,createDocumentFragment
,或者 - 再次 - 使用您喜欢的JS库中的帮助程序)答案 1 :(得分:1)
tt.innerHTML += st;
由于st
是一个字符串,而不是一个DOM元素。