I have used this tutorial and implemented infinite scrolling in django and that loads the pages.
However my Ajax calls are working only in first page load and are not working in consequent lazy loads. I have followed this answer to using $items.each…. block of code.
But after using the above method, now the waypoint does not load the pages anymore and I am getting stuck on the first page itself(the Ajax call is working). Upon removing the code, the lazy loads is able to load consequent pages. I am using Bootstrap 4 with Django 3. Any suggestions?
I am adding the script that’s blocking the lazy load.
<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>
Edit: Alternate update, But this is not what I need
I tried following alternative to onAfterPageLoad above and the lazy load works. But now the Ajax call is being called twice or more.
onAfterPageLoad: function ($items) {
$('.loading').hide();
$('.like').on('click', likecommentevent);
}
3
Answers
I have finally resolved the issue. The calling seems to be very specific upon $items for lazy load to work. PFB the working solution for your reference:
Your code needs to be called after loading page scripts and resources
To further expand on this
likecommentevent
is a value that has an function stored in it. (my jargon is far from professional) Where doeslikecommentevent
come from and what does it store? It may look like this: this resembles an upvote/downvote system.whatever function you have, store it this way and pass it in
onAfterLoad:function($items){ ##here## }