var intervalID;
function autoUpdateFeed()
{
if( document.autoupdatefeedform.autoupdatefeed.checked == true )
{
intervalID = setInterval(updateFeed, 1000);
} else {
clearInterval(intervalID);
}
}
function updateFeed()
{
var oRequest;
try {
oRequest=new XMLHttpRequest();
} catch (e) {
try {
oRequest=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
oRequest=new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("Your browser does not support AJAX!");
return false;
}
}
}
oRequest.onreadystatechange=function()
{
if(oRequest.readyState==4)
{
//Start of problem.
var newfeedstable = document.getElementById("newfeeditems");
var newcontent = document.createElement('tr');
newcontent.innerHTML = oRequest.responseText;
while (newcontent.firstChild)
{
newfeedstable.insertBefore(newcontent.firstChild, newfeedstable.firstChild);
}
//End of problem.
}
}
oRequest.open("GET","back/newsfeedlatest.php",true);
oRequest.send(null);
}
以下是我和我的朋友目前用于向我们的在制品社交网站上的新状态更新添加新状态更新的JavaScript代码,问题是当新元素添加到表中时,它们贴在一边,而不是向下平铺,所以我需要知道为什么会发生这种情况以及如何解决它,任何想法?有关详细信息,请查看网站,您可能需要创建一个帐户,但在我们再次开始使用电子邮件激活之前,请随时使用虚假电子邮件。 http://friendgrid.com/ 以下是该问题的屏幕截图,供进一步参考:http://dl.dropbox.com/u/2281426/Newsfeed%20Error.bmp
答案 0 :(得分:0)
尝试下一步:
oRequest.onreadystatechange=function() {
if(oRequest.readyState===4) {
if(oRequest.status===200) { // HTTP OK
//Start of problem.
var newfeedstable = document.getElementById("newfeeditems");
var newcontent = document.createElement('tr');
newcontent.innerHTML = oRequest.responseText;
// next lines removed: it's a problem: you download a <td> and next code insert its into table directly, without <tr>
//while (newcontent.firstChild)
//{
// newfeedstable.insertBefore(newcontent.firstChild,newfeedstable.firstChild);
//}
// 1) next line added, try next:
newfeedstable.insertBefore(newcontent,newfeedstable.firstChild)
// 2) OR IF RESPONSE CAN CONTAIN MORE THAN ONE <TD> try next (not checked code)
while (newcontent.cells.length) {
var td=newcontent.cells[0];
newcontent.removeChild(td);
var tr=document.createElement('tr');
tr.appendChild(td);
newfeedstable.insertBefore(tr,newfeedstable.firstChild);
}
//End of problem.
}
}
}
答案 1 :(得分:0)
问题出在While:
内newfeedstable.insertBefore(newcontent.firstChild, newfeedstable.firstChild);
第一个参数应该只有newcontent
而不是.firstChild
,firstChild只会插入那个元素而不是新创建的<TR>
Altough我建议你使用DOM方法修改表格,比较简单:
TableElement.insertRow( 0).innerHTML = oRequest.responseText;
你的案例中的TableElement将是newfeedstable,如果你以后不需要它,你可以减少到:
document.getElementById("newfeeditems").insertRow( 0).innerHTML = oRequest.responseText;
0作为参数会使插入始终作为第一行,使用-1始终作为最后一行插入。