1

ajax $.get を使用して無限スクロール用のデータを取得する簡単なスクリプトを作成しました。問題は、読み込みよりも速くスクロールしている可能性があるため、3 回読み込みますか?

function last_msg_funtion() 
{ 
    var ID=$(".feed_container").last().attr("id");
    $.ajax({
        url: "ajax/pagination.php",
        type:"get",
        data: "p="+ID
    }).done(function(data){
    if (data != "") 
        {
            var $boxes = $(data); 
            //$(".feed_container:last").after(data); 
            $("#feed_main").append($boxes).masonry('appended',$boxes);

        }
});

$(window).scroll(function(){
    var mostOfTheWayDown = ($(document).height() - $(window).height())  - 300;
    if ($(window).scrollTop() >= mostOfTheWayDown)
    {
        //alert('test');
        last_msg_funtion();
    }
}

一番下までスクロールすると、読み込みに時間がかかります。私が返すデータlast_msg_function()は、画像を取得する AJAX $.get() です。ただし、同じデータを 3 重にロードしています。これを防ぐためのアイデアはありますか?

ありがとう

4

2 に答える 2

1

アイドル時に false で検索時に true である「検索」変数を設定する必要があります。それを使用して、新しい検索をいつ開始するかを知ることができます。

var searching = false; // new variable

function last_msg_funtion() 
{ 
    if (!searching) { // only initiate a new ajax request if this variable is false
        searching = true; // set variable to true
        var ID=$(".feed_container").last().attr("id");
        $.ajax({
            url: "ajax/pagination.php",
            type:"get",
           data: "p="+ID
       }).done(function(data){
            searching = false; // set variable to false on success
            if (data != "") 
            {
                var $boxes = $(data); 
                //$(".feed_container:last").after(data); 
                $("#feed_main").append($boxes).masonry('appended',$boxes);

            }
       });
    }
}
于 2013-09-04T11:50:41.257 に答える
0

G+ を使用していて、ページの一番下までスクロールすると、G+ がメッセージをフェッチする前に少し遅延が発生します。
setInterval() を使用すると、問題が解決します。内部インターバル関数呼び出しlast_msg_funtion()

于 2012-05-30T04:12:33.487 に答える