Javascript 加载更多返回副本

Javascript 加载更多返回副本,javascript,php,jquery,mysql,Javascript,Php,Jquery,Mysql,我试图通过php和ajax从数据库加载更多内容,并阅读了一些教程,但我尝试返回的是重复条目。(这里只是我真实代码的一个示例:) 查询: $sql = "SELECT name FROM table WHERE cat = 2 LIMIT 10"; $limit = $_GET['limit']; $current = $_GET['current']; $sql = "SELECT name FROM table WHERE cat = 2 LIMIT $current OFFSET $li

我试图通过php和ajax从数据库加载更多内容,并阅读了一些教程,但我尝试返回的是重复条目。(这里只是我真实代码的一个示例:)

查询:

$sql = "SELECT name FROM table WHERE cat = 2 LIMIT 10";
$limit = $_GET['limit'];
$current = $_GET['current'];

$sql = "SELECT name FROM table WHERE cat = 2 LIMIT $current OFFSET $limit";
$('.getMore').click(function() {
  var adslen = $('.Ads').length; // this return current items
  var limit = $(this).attr('data-limit'); // this return current item and items after load more

  $.ajax({
    type: "GET",
    data: {
      limit: limit,
      current: adslen
    },
    dataType: 'html',
    url: '/api/fetch.php?getBrowse',
    success: function(data) {
      // do something
    }
  });

});
<a class="getMore" id="browse-getMore" data-limit="10">More</a>
这将加载前10项

查询加载更多信息:

$sql = "SELECT name FROM table WHERE cat = 2 LIMIT 10";
$limit = $_GET['limit'];
$current = $_GET['current'];

$sql = "SELECT name FROM table WHERE cat = 2 LIMIT $current OFFSET $limit";
$('.getMore').click(function() {
  var adslen = $('.Ads').length; // this return current items
  var limit = $(this).attr('data-limit'); // this return current item and items after load more

  $.ajax({
    type: "GET",
    data: {
      limit: limit,
      current: adslen
    },
    dataType: 'html',
    url: '/api/fetch.php?getBrowse',
    success: function(data) {
      // do something
    }
  });

});
<a class="getMore" id="browse-getMore" data-limit="10">More</a>
Ajax:

$sql = "SELECT name FROM table WHERE cat = 2 LIMIT 10";
$limit = $_GET['limit'];
$current = $_GET['current'];

$sql = "SELECT name FROM table WHERE cat = 2 LIMIT $current OFFSET $limit";
$('.getMore').click(function() {
  var adslen = $('.Ads').length; // this return current items
  var limit = $(this).attr('data-limit'); // this return current item and items after load more

  $.ajax({
    type: "GET",
    data: {
      limit: limit,
      current: adslen
    },
    dataType: 'html',
    url: '/api/fetch.php?getBrowse',
    success: function(data) {
      // do something
    }
  });

});
<a class="getMore" id="browse-getMore" data-limit="10">More</a>
例如,现在我们有10个项目,在点击loadMore之后,它又加载了10个项目,但问题是它也加载了重复的项目,我做错了什么

HTML:

$sql = "SELECT name FROM table WHERE cat = 2 LIMIT 10";
$limit = $_GET['limit'];
$current = $_GET['current'];

$sql = "SELECT name FROM table WHERE cat = 2 LIMIT $current OFFSET $limit";
$('.getMore').click(function() {
  var adslen = $('.Ads').length; // this return current items
  var limit = $(this).attr('data-limit'); // this return current item and items after load more

  $.ajax({
    type: "GET",
    data: {
      limit: limit,
      current: adslen
    },
    dataType: 'html',
    url: '/api/fetch.php?getBrowse',
    success: function(data) {
      // do something
    }
  });

});
<a class="getMore" id="browse-getMore" data-limit="10">More</a>
更多
按load more后,更新数据限制:

<a class="getMore" id="browse-getMore" data-limit="20">More</a>
更多

问题在于您没有指定顺序。在您的情况下,
SELECT
语句返回没有特定顺序的行。当您运行它一次时,它可能返回一个记录列表,当您运行它两次时(相同的select查询),它可能返回另一组记录。那么,就这样做吧:

$sql = "SELECT name FROM table WHERE cat = 2 ORDER BY id LIMIT $current OFFSET $limit";

阅读理论。它表示关系(或表)是一组无序的记录,除非您明确指定顺序。顺便说一句,如果您指定了顺序,如果我没有弄错的话,它就不再是一个关系。

为什么您认为它会加载重复项?似乎
name
不是主键,可能包含duplicates@Jacobian我也加载了
id
,我只是把我的代码做了个简短的例子,我注意到在我的问题中<代码>id是唯一的且主要的。我真正的代码放在这里太庞大了。离题:不要直接使用变量,因为SQLInjection@Robert这是示例代码,不是真实的。但是谢谢你。我知道。我在我的真实代码中添加了
orderbyads.id
,但仍然返回duplicate,它返回如下内容:1-2-3-4-5=>加载更多=>1-2-3-4-5-3-2-1它不可能是真的,因为记录是按id排序的。所以序列
4-5-3-2
根本不可能。我猜,您的客户端代码存在一些问题,而不是服务器代码。是否需要共享真实代码?或我真的得到了这个结果。有一个服务器端和一个客户端。服务器端可能会返回一个有效的结果(只需检查浏览器开发人员工具中的“网络”选项卡),而客户端可能会产生一些垃圾。至少检查一下,以了解问题所在-服务器端或客户端。