我的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调用。