Ajax 东西不是 运行 Django Infinite Scroll

Ajax stuff are not running with Django Infinite Scroll

我已经使用 this tutorial 并在 django 中实现了无限滚动并加载了页面。

然而,我的 Ajax 调用仅在第一页加载中有效,在随后的延迟加载中无效。我 使用 $items.each.. 代码块。

但是在使用上述方法后,现在航路点不再加载页面,我卡在了第一页本身(Ajax 调用有效)。删除代码后,延迟加载能够加载后续页面。我正在使用 Bootstrap 4 和 Django 3。有什么建议吗?

我正在添加阻止延迟加载的脚本。

<script src="{% static 'js/jquery.waypoints.min.js' %}"></script>
<script src="{% static 'js/infinite.min.js' %}"></script>
<script>
$(document).ready(function() {
    var infinite = new Waypoint.Infinite({
      element: $('.infinite-container')[0],
      onBeforePageLoad: function () {
        $('.loading').show();
      },
      onAfterPageLoad: function ($items) {
        $('.loading').hide();
        $items.each(function(){
            $(this).find('.like').on('click', likecommentevent);
        }
      }
    });
});
</script>

编辑:备用更新,但这不是我需要的

我尝试了上面的 onAfterPageLoad 替代方法,并且延迟加载有效。但是现在 Ajax 调用被调用了两次或更多次。

onAfterPageLoad: function ($items) {
        $('.loading').hide();
        $('.like').on('click', likecommentevent);
      }

加载页面脚本和资源后需要调用您的代码

$(document).ready(function() {
  $(".infinite-container").waypoint(function(direction) {
    // your code
    if (direction === 'down') {
        losdMore();
    }
  }   
  function loadMore() {
    console.log("Loading page " );


    $.waypoints('refresh');
}    
});

我终于解决了这个问题。该调用似乎非常特定于 $items 以使延迟加载起作用。 PFB工作方案供大家参考:

<script src="{% static 'js/jquery.waypoints.min.js' %}"></script>
<script src="{% static 'js/infinite.min.js' %}"></script>
<script>
$(document).ready(function() {
    var infinite = new Waypoint.Infinite({
      element: $('.infinite-container')[0],
      onBeforePageLoad: function () {
        $('.loading').show();
      },
      onAfterPageLoad: function ($items) {
        $('.loading').hide();
        $items.find('.like').on('click', likecommentevent);
      }
    });
});
</script>
<script src="{% static 'js/jquery.waypoints.min.js' %}"></script>
<script src="{% static 'js/infinite.min.js' %}"></script>
<script>
$(document).ready(function() {
var infinite = new Waypoint.Infinite({
  element: $('.infinite-container')[0],
  onBeforePageLoad: function () {
    $('.loading').show();
  },
  onAfterPageLoad: function ($items) {
    $('.loading').hide();
    $items.find('.like').on('click', likecommentevent);
  }
});
});
</script>

进一步扩展 likecommentevent 是一个存储有函数的值。 (我的行话很不专业) likecommentevent 从哪里来,存储什么?它可能看起来像这样:这类似于 upvote/downvote 系统。

var likecommentevent = function(event){

var answerid=$(this).data('answer');
        // Ajax
        $.ajax({
            url:"/save-downvote",
            type:"post",
            data:{
                answerid:answerid,
                csrfmiddlewaretoken:"{{csrf_token}}"
            },
            dataType:'json',
            success:function(res){
                var _prevupvote=$(".downvote-count-"+answerid).text();
                if(res.bool==true){
                    $(".downvote-count-"+answerid).text(parseInt(_prevupvote)+1);
                }
            }
        });
 }

无论你有什么功能,都这样存储并传入onAfterLoad:function($items){ ##here## }