0

ユーザーがウィンドウの一番下までスクロールしたことを検出する匿名関数があります。匿名関数内で、完了するまでに時間がかかるデータベースへの呼び出しがあります。

var allowing_more = 1;

$(window).scroll(function() {
    if (allowing_more == 1){
        if ($(window).scrollTop() + $(window).height() == $(document).height()) {
            allowing_more = 0;
            //query
            allowing_more = 1;
        }
    }
});

このとき、ユーザーが再度ウィンドウの一番下までスクロールすると、クエリの読み込み中にユーザーがウィンドウの一番下までスクロールしたオカレンスを保持するキューが作成されるようです。クエリが完了すると、これらのオカレンスが実行されます。

匿名関数がより多くのクエリ要求を受け入れているかどうかを検出するブール ステートメントがありますが、これは無視されているようです。

匿名関数を一時的に無視して再度有効にする方法はありますか?

4

3 に答える 3

0

必要なのは、前のリクエストが完了するまでデータベースへのクエリを停止することだけです。これは正しいですか?

これが正しい場合

var chkFlg=0;
$(window).scroll(function() {
    if ($(window).scrollTop() + $(window).height() == $(document).height()) {
        if(chkFlg===1){
           //query your database after you get your result from db assign 1 to chkFlg
            chkFlg = 1;
        }
    }
});
于 2012-11-28T04:43:34.323 に答える
0
var flag = 0;
$(window).scroll(function() {
if(flag===0){
    if ($(window).scrollTop() + $(window).height() == $(document).height()) {
        //query
      flag = 1;
    }
   flag = 0;
  }
});

これはうまくいくはずです

于 2012-11-28T04:50:16.947 に答える
0

この種のパターンに従うだけで、ブール条件が機能するはずです。

safeToQuery = true;  //
$(window).scroll(function() {
    ...
    if (safeToQuery) {
        safeToQuery = false;
        //send query request
        $.ajax({...}).done(function(data,etc){
            //do whatever with the results
        }).always(function (){
            //regardless of whether or not the last request resulted 
            //in an error, make it safe to query again
            safeToQuery = true;
        });
    }
});

注:safeToQueryグローバルである必要はありません。 即時呼び出し関数式 (IIFE)でローカル変数として宣言するか、少なくとも保持する必要がある限り存続するオブジェクトのプロパティにすることができます。スクロール ハンドラがアクティブです。

于 2012-11-28T05:14:04.757 に答える