ここで明確な解決策を見るには夜遅くかもしれませんが、意見を持っている人からいくつかの考えを得るだろうと思いました...
私が取り組んでいるサイトには、ユーザー投稿の長いリストがあります。一番下に到達または近づくと、100件の投稿の次のバッチですべてのスクロールイベントハンドラーがajaxに機能します。
私の質問は...次のシナリオを防ぐにはどうすればよいですか?
- UserXがサイトにアクセスし、投稿1〜100を読み込みます
- さらに10人のユーザーがサイトにアクセスし、さらに10件の投稿を追加します
- UserXは一番下までスクロールし、以前は投稿91-190であった投稿101-200を読み込みます。
- UserXは、ページ上の投稿91〜100の重複で終了します
他の誰かに役立つ場合に備えて、以下にコードの簡略版を含めます
$.ajax({
type:'POST',
url:"/userposts.php",
data:{ limit: postCount },
success:function(data) {
$("postsContainer").append(data);
if ( $("postsContainer").find("div[id='lastPostReached']") ) {
// unbind infinite scrolling event handlers
}
},
dataType:'html'
});
私のPHPスクリプトには、基本的に次のものがあります。
if ( ! isset($_POST["limit"]) ) {
$sql .= " LIMIT 101"; // initial request
} else {
$sql .= " LIMIT {$_POST["limit"]},101
}
$posts = mysql_query($sql);
while( $post = mysql_fetch_assoc($posts) ) {
/* output formatted posts */
}
// inform callback handler to disable infinite scrolling
if ( mysql_num_rows($posts) < 101 ) {
echo '<div id="lastPostReached"></div>';
}
これにより、無限のスクロールが素晴らしく簡単になりますが、ajaxリクエストの間に新しいレコードがテーブルに追加されたときに表示される仮想の重複を防ぐにはどうすればよいですか?