从表中检索的条目是不是重复? 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 中的 &lt;div&gt; 标签?? 【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章

从 mysql 表中检索所有行,但首先将它们分组以删除重复

PHP - 导出CSV函数重复每个条目的标题

如何从表中删除重复记录? [复制]

从表 mysql 中获取重复的条目

根据表 B pyspark 从表 A 中选择条目 [重复]

从 postgres 数据库中删除重复条目