我正在创建一个页面,以便在您滚动浏览时从数据库获取图像,但我的问题是,如果您滚动浏览以下网站并从数据库获取图像,当有人向数据库添加新图像时,下一个获取图像将再次显示。
如何预防?
HTML:
<div class="row">
<div class="col-sm-6 rowL">
</div>
<div class="col-sm-6 rowR">
</div>
</div>
JS:
$(function()
{
var load = 0;
$(window).scroll(function(){
var win = $(window).height();
var doc = $(document).height();
var top = $(window).scrollTop();
var loadat = doc - win;
loadat = loadat - 200;
if(top >= loadat)
{
load++;
$.post('ajax.php', {load: load}, function(data)
{
var str = data;
var res = str.split("split");
//alert(res);
$(".rowL").append(res[0],res[1],res[2],res[3],res[4]);
$(".rowR").append(res[5],res[6],res[7],res[8],res[9]);
});
}
});
});
PHP:
<?PHP
include 'core/init.php';
$db = DB::getInstance();
$img = $db->Get('img');
$load = $_POST['load'];
$dane = $db->scroll($load);
foreach($dane as $key=>$value)
{
?>
<a href="" class="thumbnail">
<img src="<?PHP echo $value->src; ?>" alt="img"/>
</a>split
<?PHP
}
?>
public function scroll($load)
{
$load *= 10;
$result = $this->_pdo->query("SELECT * FROM img ORDER BY id DESC LIMIT $load,10");
return $result->fetchAll(PDO::FETCH_OBJ);
}
最佳答案
这是可以预料到的。例如您的查询返回了以下图像 ID。
42, 39, 37, 5, 4
假设您的分页由 2 张图片组成,所以
42, 39, 37, 5, 4
^^^^^^ ^^^^^ ^
page 1 page 2 page 3
添加新图像(例如 ID #50)时,它将显示在查询结果的前面:
50, 42, 39, 37, 5, 4
现在您的页面已关闭:
50, 42, 39, 37, 5, 4
page 1 page 2 page 3
您无能为力解决此问题,因为您正在按“最近的在前”的顺序浏览页面。添加新图像自然会使该新图像成为最新图像,并将所有其他图像向下推一个空格。
当您开始分页时,您可以跟踪结果中的“第一条”记录,并排除高于该记录的任何记录。
例如
loading page 1 -> highest image = 42
loading page 2 -> add "where id <=42" to the query
关于php - Ajax 从数据库中检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30849579/