1
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コードです。問題は、新しい要素がテーブルに追加されると、それらが並べて表示されることです。下に並べるのではなく、横に並べるので、なぜこれが起こっているのか、そしてそれを修正する方法を知る必要があります、何かアイデアはありますか?詳細については、Webサイトを参照してください。アカウントを作成する必要がある場合がありますが、電子メールアクティベーションの使用を再開するまで、偽の電子メールを自由に使用してください。http://friendgrid.com/ これは、さらに参照できるように問題のスクリーンショットです:http: //dl.dropbox.com/u/2281426/Newsfeed%20Error.bmp

4

2 に答える 2

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.
       }
    }
}
于 2011-09-29T05:41:55.697 に答える
0

問題は、While内の行にあります。

newfeedstable.insertBefore(newcontent.firstChild, newfeedstable.firstChild);

最初のパラメータは、newcontentなしでのみ存在する必要があります.firstChild。firstChildはその要素のみを挿入し、新しく作成されたものは挿入しません。<TR>

DOMメソッドを使用してテーブルを変更することをお勧めしますが、次のような簡単な方法があります。

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

あなたの場合のTableElementはnewfeedstableであり、後でそれが必要ない場合は、次のように減らすことができます。

document.getElementById("newfeeditems").insertRow( 0).innerHTML = oRequest.responseText;

パラメータとして0を指定すると、挿入は常に最初の行になり、-1を使用して常に最後の行として挿入されます。

于 2011-09-29T05:50:57.217 に答える