从表中检索的条目是不是重复? PHP
Posted
技术标签:
【中文标题】从表中检索的条目是不是重复? PHP【英文标题】:Entries retrieved from table are being duplicated? PHP从表中检索的条目是否重复? PHP 【发布时间】:2012-12-13 21:51:09 【问题描述】:我的网站上有一个结果页面,我使用 AJAX 在向下滚动时返回更多结果,但是我的问题是,当它拉出结果时,似乎多次拉出相同的结果?我不知道是什么原因造成的,谁能看到我做错了什么?
AJAX
$(window).scroll(function ()
if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10)
var number = $(".directory").children().length;
$.ajax(
type: "POST",
url: "getentries.php",
data: "count="+number,
success: function(results)
$('.directory').append(results);
);
else
);
PHP
$result = mysql_query("SELECT * FROM directory LIMIT $_POST['count'],12");
$c = 1;
while($row = mysql_fetch_array($result))
echo '<div class="entry';
if (($c % 4) == 1) echo ' alpha ';
echo 'ALL THE DATA IS GOING HERE';
$c++;
【问题讨论】:
萤火虫(或任何调试器)说什么? js最终会调用php两次吗? 更改 $('.directory').append(results);到 $('.directory').html(results);看看你是否只得到你想要附加的数据 不走运@WebweaverD,同样的事情发生$_POST['count']
是否产生预期的数字?
你是否关闭了 PHP 中的 <div>
标签??
【参考方案1】:
问题很可能是在您滚动时触发了多个 ajax 调用。像这样设置一个定时事件监听器:
didScroll = false;
$(window).scroll(function()
didScroll = true;
);
setInterval(function()
if ( didScroll )
didScroll = false;
if(($(document).height() - $(window).height()) - $(window).scrollTop() < 100)
// load more results
, 250);
这篇文章解释了为什么你的解决方案是个坏主意:http://ejohn.org/blog/learning-from-twitter/
【讨论】:
我会更高兴有一个解决方案,它也根据@MathewNie 或类似的方法考虑 ajaxInProgress。在重新请求之前,您至少应该中止当前正在进行的任何 ajax。 我同意@Beetroot-Beetroot 的观点,确保您没有正在进行的 ajax 调用会增加稳健性。 不这样做的可能后果 - 重复结果 - 回到第一格。【参考方案2】:所以问题是,一旦达到滚动阈值,您就会多次调用 ajax。您需要在第一个 ajax 调用上添加一个标志,以便在 ajax 调用完成之前不会再次调用它。
ajaxInProgress = false;
if (!ajaxInProgress && ($(window).scrollTop() >= $(document).height() - $(window).height() - 10))
ajaxInProgress = true;
$.ajax(
type: "POST",
url: "getentries.php",
data: "count="+number,
success: function(results)
ajaxInProgress = false;
$('.directory').append(results);
);
【讨论】:
感谢@MatthewNie,但它仍在复制我的结果:/【参考方案3】:问题在于您如何通过 ajax 调用传递数据。从 Jquery 文档中,您需要将计数和金额放在数据中的 javascript 对象中:
$.ajax(
type: "POST",
url: "getentries.php",
data: count: number,
success: function(results)
$('.directory').append(results);
);
修复此问题后,您的 Mysql 查询应该将正确的下一条数据返回到您的视图中。
希望这会有所帮助!
【讨论】:
data: "如果还不是字符串,则将其转换为查询字符串。" 你可以发送一个刺或一个对象。仅供参考以上是关于从表中检索的条目是不是重复? PHP的主要内容,如果未能解决你的问题,请参考以下文章