0

大家好,提前感谢您的帮助。

我有一个无限滚动脚本,我在本地主机上开发和工作,但不在我的服务器上。

JS 代码如下所示:

$('#load-more').on('mouseenter', function() {
  $(this).css('cursor', 'pointer');
}).on('click', function slide(event) {
  var relData = $.parseJSON($(this).attr('rel'));

  $('#loader').html('<img src="design/loader.gif" alt="" />');

  var data = {
    displayedSites: relData.displayedSites,
    catNum: relData.catNum,
    streamPage: relData.streamPage,
    numSites: relData.numSites
  };

  $.ajax({
    type: 'POST',
    url: 'ajax/infinite-scroll.php',
    data: data,
    dataType: 'json',
    timeout: 3000,
    success: function(data) {
      $('#sitesstream').fadeOut(100, function() {
        $(this).append(data.newSitesSet);
      }).fadeIn(1000);
      $('#loader').html('');
      if (data.moreSitesRel.active != 'off') {
        $('#load-more').show();
        $('#load-more').attr('rel', '{"displayedSites":"' + data.moreSitesRel.displayedSites + '", "catNum":"' + data.moreSitesRel.catNum + '", "streamPage":"' + data.moreSitesRel.streamPage + '", "numSites":"' + data.moreSitesRel.numSites + '"}');
      } else {
        $('#load-more').hide();
      }
    },
    error: function() {
      $('#siteStreamInfo').text('Problem');
    }
  });

  return false;
});

它调用一个 PHP 文件来添加更多内容并发送回页面。

您是否知道缺少什么或我应该添加/更改什么以使其在我的服务器上工作,这是一个 >7 php 版本。我也使用 jQuery 版本 3.5.1

太感谢了。

4

2 回答 2

0

作为基本的经验法则,永远不要手动制作自己的 JSON 字符串。

当您将 JSON 设置回rel属性时,您可能会在返回的数据中遇到某些内容,从而使您的 JSON 无效。

相反,使用JSON.stringify()

$("#load-more").attr("rel", JSON.stringify({
  displayedSites: data.moreSitesRel.displayedSites,
  catNum: data.moreSitesRel.catNum,
  streamPage: data.moreSitesRel.streamPage,
  numSites: data.moreSitesRel.numSites
}));

仅供参考,您的mouseenter处理程序会比实际的 CSS 简单得多

#load-more { cursor: pointer; }

您甚至不需要:hover因为cursor规则仅适用于鼠标悬停。

于 2022-02-23T03:47:24.883 回答
-2

谢谢菲尔的帮助。我已经删除了光标的东西并将它放在我的 CSS 中:)

我最终解决了我的问题,这不是 jQuery JSON 问题,而是对infinite-scroll.php 文件的 PDO 查询。

这很奇怪。

查询是:

$sitesQuery = 'SELECT '.$fields.' FROM annuaire_sites AS sites LEFT JOIN countries AS coun ON coun.id = sites.loc_country WHERE sites.category = '.$page['catNum'].' and sites.valid = 1 and sites.premium = 0 ORDER BY sites.date_ins DESC, sites.hour_ins DESC LIMIT :start, :perpage';

        $res_sites = $bdd->prepare($sitesQuery);
    
        $res_sites->bindValue(':start', 0, PDO::PARAM_INT);
        $res_sites->bindValue(':perpage', 60, PDO::PARAM_INT);
        $res_sites->execute();
        $res_sites->setFetchMode(PDO::FETCH_OBJ);

我替换为:

$sitesQuery = 'SELECT '.$fields.' FROM annuaire_sites AS sites LEFT JOIN countries AS coun ON coun.id = sites.loc_country WHERE sites.category = '.$catNum.' and sites.valid = 1 and sites.premium = 0 ORDER BY sites.date_ins DESC, sites.hour_ins DESC LIMIT '.$start.', '.$displayedSites.'';

$res_sites = $bdd->prepare($sitesQuery);

$res_sites->execute();
$res_sites->setFetchMode(PDO::FETCH_OBJ);

由于我不知道的原因,我放弃了作为问题根源的 bindValue 东西!因为我在某些页面上使用了相同的查询并且它工作正常......

如果有人有解释...

无论如何,再次感谢您的帮助。

于 2022-02-23T05:19:32.330 回答