繁体   English   中英

Istotope Ajax内容加载

[英]Istotope ajax content load

我坚持用同位素砌体布局在WordPress中实现下一组帖子的加载。 它只是没有为附加元素触发,我不知道为什么。 如果有人能指出正确的方向,我将不胜感激。

jQuery AJAX函数

function load_content( args ) {

        $container = $('#container-async');
        $status    = $('.status');

        $.ajax({
            url: ajax_url,
            data: {
                action: 'do_load_posts',
                nonce: nonce,
                args: args
            },
            type: 'post',
            dataType: 'json',
            success: function( data, textStatus, XMLHttpRequest ) {

                $items = data.posts;

                if ( args.action === 'filter') {
                    /**
                     * Replace items
                     */
                    $container.imagesLoaded( function() {
                        $container.isotope({
                            itemSelector: '.grid-item',
                            percentPosition: true,
                            masonry: {
                                columnWidth: '.grid-sizer'
                            }
                        });
                        $container.html( $items ).isotope( 'appended', $items, function() {
                            console.log('inserted');
                        });
                    });
                }
                else {
                    /**
                     * Append items
                     */
                    $container.imagesLoaded( function() {
                        $container.isotope({
                            itemSelector: '.grid-item',
                            percentPosition: true,
                            masonry: {
                                columnWidth: '.grid-sizer'
                            }
                        });
                        $container.append( $items ).isotope( 'appended', $items, function() {
                            console.log('appended');
                        });
                    });
                }
            },
            error: function( MLHttpRequest, textStatus, errorThrown ) {
                $status.toggleClass('active');
            }
        });
}

WordPress AJAX:

function ajax_do_load_posts() {

    // Verify nonce
    if( !isset( $_POST['nonce'] ) || !wp_verify_nonce( $_POST['nonce'], 'nonce' ) )
        die('Permission denied');

    $response = [
        'status' => 500,
        'posts'  => 0,
    ];

    $filter = $_POST['args'];

    $type   = get_post_type_object( $filter['type'] );
    $args   = [
        'post_type'      => sanitize_text_field($filter['type']),
        'paged'          => intval($filter['page']),
        'posts_per_page' => $filter['qty'],
    ];

    $qry = new WP_Query($args);

    if ($qry->have_posts()) :
        ob_start();

        while($qry->have_posts()) : $qry->the_post(); ?>
            <div class="grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3">
                <?php get_template_part('templates/loop', 'card' ); ?>
            </div>
        <?php endwhile;

        $response = [
            'status' => 200,
            'posts'  => ob_get_clean(),
        ];
    endif;

    wp_reset_query();
    wp_reset_postdata();

    die(json_encode($response));
}

add_action('wp_ajax_do_load_posts', 'ajax_do_load_posts');
add_action('wp_ajax_nopriv_do_load_posts', 'ajax_do_load_posts');

将项目插入或追加到容器中,但仅在页面加载时已经存在的项目上触发砌筑。

在此处输入图片说明

我已经在Google周围搜索并尝试了各种解决方案,但是它们都无法使用,无论是使用同位素还是砌筑jquery插件都无法使用。

我能够解决我的问题,而看起来问题似乎是因为我使用的是jQuery默认的添加/插入方法。 我已改用同位素方法,现在一切正常。

所以基本上不是

$container.html( $items ).isotope( 'appended', $items, function() {
    console.log('inserted');
});

我现在正在使用:

$grid.isotope('insert', jQuery($items));

如果我不使用同位素append / insert方法,实际上同位素不能知道要附加的项似乎合乎逻辑。 请注意,我还将$ items包装在jQuery中。

无论如何,我为同一PHP函数使用的JS是:

function load_content( args ) {

    $container = $('#container-async');
    $status    = $('.status');

    $.ajax({
        url: ajax_url,
        data: {
            action: 'do_load_posts',
            nonce: nonce,
            args: args
        },
        type: 'post',
        dataType: 'json',
        success: function( data, textStatus, XMLHttpRequest ) {

            $items = data.posts;

            var $grid = $('.masonry').imagesLoaded( function() {

                $grid.isotope({
                    itemSelector: '.grid-item',
                    percentPosition: true,
                    masonry: {
                        columnWidth: '.grid-sizer'
                    }
                });

                if ( args.action === 'filter') {
                    $grid.isotope('remove', $('.grid-item'));
                }

                $grid.isotope('insert', jQuery($items));
            });


            $grid.on( 'layoutComplete', function( event, laidOutItems ) {
                $container.removeClass(data.action);
            });
        },
        error: function( MLHttpRequest, textStatus, errorThrown ) {
            $status.toggleClass('active');
        }
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM