Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让JavaScript正确平铺此表?_Javascript_Auto Update_Tile_Feed - Fatal编程技术网

如何让JavaScript正确平铺此表?

如何让JavaScript正确平铺此表?,javascript,auto-update,tile,feed,Javascript,Auto Update,Tile,Feed,这是我和我的朋友目前正在使用的JavaScript代码,用于向表中添加新的状态更新,以便在我们的在线社交网站上进行新的状态更新,问题是当新元素添加到表中时,它们会向一侧平铺,而不是向下平铺,所以我需要知道为什么会发生这种情况以及如何修复它,有什么想法吗?有关更多信息,请查看网站,您可能需要创建帐户,但在我们再次开始使用电子邮件激活之前,您可以随意使用假电子邮件。 以下是该问题的屏幕截图供进一步参考:请尝试下一步: var intervalID; function autoUpdateFeed()

这是我和我的朋友目前正在使用的JavaScript代码,用于向表中添加新的状态更新,以便在我们的在线社交网站上进行新的状态更新,问题是当新元素添加到表中时,它们会向一侧平铺,而不是向下平铺,所以我需要知道为什么会发生这种情况以及如何修复它,有什么想法吗?有关更多信息,请查看网站,您可能需要创建帐户,但在我们再次开始使用电子邮件激活之前,您可以随意使用假电子邮件。 以下是该问题的屏幕截图供进一步参考:

请尝试下一步:

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);
}
oRequest.onreadystatechange=function(){
if(oRequest.readyState==4){
如果(oRequest.status==200){//HTTP确定
//问题的开始。
var newfeedstable=document.getElementById(“newfeeditems”);
var newcontent=document.createElement('tr');
newcontent.innerHTML=oRequest.responseText;
//删除下一行:这是一个问题:您下载了一个,下一个代码直接将其插入到表中,而无需
//while(newcontent.firstChild)
//{
//newfeedstable.insertBefore(newcontent.firstChild,newfeedstable.firstChild);
//}
//1)添加下一行,请尝试下一步:
newfeedstable.insertBefore(newcontent,newfeedstable.firstChild)
//2)或者如果响应可以包含多个try next(未选中代码)
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);
}
//问题结束了。
}
}
}

问题将出现在While中的行:

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.
       }
    }
}
第一个参数应该只有
newcontent
,没有
。firstChild
,firstChild将只插入该元素,而不是新创建的

尽管我建议您使用DOM方法来修改表,但更简单的方法是:

newfeedstable.insertBefore(newcontent.firstChild, newfeedstable.firstChild);
您案例中的TableElement将是newfeedstable,如果以后不需要它,您可以将其缩减为:

TableElement.insertRow( 0).innerHTML = oRequest.responseText;

0 as参数将使插入始终作为第一行,使用-1将插入始终作为最后一行。

请显示从newsfeedlatest.php返回的文本(HTML)。另外,问题代码中while循环的目的是什么?在这一点上(而不是循环),您不想直接在
newfeedstable
中插入新创建的TR元素
newcontent
?这很有效,谢谢,我唯一需要添加的是一个if语句,用于空响应。
document.getElementById("newfeeditems").insertRow( 0).innerHTML = oRequest.responseText;