0

いくつかのajaxコンテンツをテーブルにロードしようとしていますが、残念ながら、新しい各行をロードするのではなく、最後の行を複数回ロードするだけです。

これは私が使用しているコードです:

function periodicRefresh()
{
    $.ajax({
        type: 'GET',
        url: 'include/ajaxActions.php',
        data: "action=displayLastEvent",

        success: function(msg){
            var newid = msg;
            current = $("#list tr:first").get(0).id;
            if(newid != current){
                while (current<newid)
                {
                    current++;
                    addToList(current);
                }   
            }
        }
    });                 
}

function addToList(x)
{
     $.ajax({
            type: 'GET',
            url: 'include/ajaxActions.php',
            data: "action=displayRow&row="+x,

            success: function(msg){
                $("#list").prepend(msg);
                $("#list tr:first").highlightFade({
                    speed:3000
                });
                lastrow = x-20;
                $('#'+lastrow).remove();
            }
     });

}

displayLastEvent最後の行のIDを返します。

displayRow最後の行を返します

4

3 に答える 3

1

リストに追加する行を増やす必要がある場合は常に、必要以上にAJAXリクエストを行う可能性が高いため、アプローチを変更することをお勧めします(2つではなく2+)。

IDのCSV(または渡したもの)を受け入れるように更新include/ajaxActions.php?action=displayRowし、1行だけのデータではなく、行データのセットを返します。

于 2009-11-07T22:19:37.457 に答える
1

xmlHttpsを配列または抽象データ型にプッシュする必要があります。これにより、イベントハンドラーをアタッチできます。jqueryはあなたのためにそれをしないようです。

于 2009-11-07T17:42:49.453 に答える
0

私はそれを考えます:

current = $("#list tr:first").get(0).id;

jQuery最初にロードされたときのページのみを記憶するのと常に同じ結果を返します。
たとえば、単一の がある場合tr[id=0]:

pass 1 : current = 0; msg = 1 -> 1 tr prepended with id = 1;
pass 2 : current is always 0 (not 1); msg = 1 -> 1 tr prepended with id = 1;
...

あなたがすべきことは、jQueryメッセージを追加した後にページ構造を認識させるか、最後のインデックスを別の方法で保存することhidden inputです。たとえば、次のように使用します。

HTML:

<input type="hidden" value="0" id="lastId"/>

脚本:

#lastId valueページがロードされたときに初期化します。

$(document).ready(function(){
    $("#lastId").val(0);//or by using your displayLastEvent action
});

periodicRefresh読むように変更#lastId value

function periodicRefresh()
{
    $.ajax({
        type: 'GET',
        url: 'include/ajaxActions.php',
        data: "action=displayLastEvent",

        success: function(msg){
                var newid = msg;
                var current = $("#lastId").val();
                if(current<newid) $("#lastId").val(newid);
            if(newid != current){
                while (current<newid)
                {
                        current++;
                        addToList(current);
                }       
            }
        }
    });                     
}
于 2009-11-12T16:17:36.513 に答える