我的AJAX加载更多function没有正确检查帖子的结尾 - 如果没有帖子,它会再次显示预加载器。这是因为每次发送ajax请求之前都删除了pleroader的隐藏类。
我该如何检查帖子的结尾是否正确?
AJAX
如果response为0 - 只需隐藏预加载器。因此预加载器会再次出现,而不应该出现。
var page = 3;
var emptyQuery = false;
function load_posts() {
page++;
var category = $('.cat-list__item.active').data('category');
$.ajax({
url: flow.ajax_url,
type: 'POST',
beforeSend: function (jqXHR) {
$('body').addClass('loading');
if ($('.preloader').length) {
$('.preloader').removeClass('preloader--hidden');
}
},
data: {
action: 'scroll_post_load',
page: page,
category: category
},
success: function (response) {
if ( response==0 ) {
emptyQuery = true;
if ($('.preloader').length) {
$('.preloader').addClass('preloader--hidden');
}
} else {
if ($('.preloader').length) {
$('.preloader').addClass('preloader--hidden');
}
var html = response;
$(html).hide().appendTo('.posts-list').fadeIn(1000);
}
$('body').removeClass('loading');
}
});
}
// Scripts which runs on scrolling
$( window ).on( 'scroll', function() {
if( $(window).scrollTop() > $('.posts-list').height() && !$('body').hasClass('loading')) {
if(emptyQuery == false) {
load_posts();
}
}
} );
PHP
如果是最后一页 - 在response中返回0
function scroll_post_load(){
$paged = $_POST['page'];
$category = $_POST['category'];
if( $category=='all' || !$category ) {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => '3',
'paged' => $paged
);
}
if( $category ) {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => '3',
'paged' => $paged,
'cat' => $category
);
}
$wp_query = new WP_Query( $args );
if ( $wp_query->max_num_pages == get_query_var('paged')) {
return '0';
}
if ($wp_query->have_posts()) :
while ($wp_query->have_posts()) : $wp_query->the_post();
show_template('loop-post');
endwhile;
endif;
wp_die();
}
add_action('wp_ajax_scroll_post_load', 'scroll_post_load');
add_action('wp_ajax_nopriv_scroll_post_load', 'scroll_post_load');
分析解答
如果您只是在response中返回页面总数,那么您可以解决此问题,然后在脚本中检查下一页是否为最后一页或其他内容。
这就是我经常这样做的方式。我总是返回最大页数和内容,所以我可以检查是否需要最后一次执行AJAX调用。