Mosaicflow使用ajax将新项目附加到列表中


Mosaicflow append list with new items with ajax

我使用马赛克流列出我的项目,但有很多项目,所以我只想显示前20个项目,点击按钮后在前20个下面显示下一个20,依此类推

为此,我使用了一个ajax调用,它工作得很好,所以它显示了接下来的20个项目,但随后马赛克流布局中断了。。。

有人知道我该怎么解决这个问题吗?

我尝试使用马赛克流添加事件,但随后它将接下来的20个项目添加到最小的列中。。。

我还试图将数据附加到马赛克流容器中,但这也不好。。。

html如下(2列):

    <div class="mosaicflow">
        <div class="mosaicflow__column">
            <div class="mosaicflow__item">
                // item details
            </div>
            <div class="mosaicflow__item">
                // item details
            </div>
            // more mosaicflow__item divs
        </div>
        <div class="mosaicflow__column">
            <div class="mosaicflow__item">
                // item details
            </div>
            <div class="mosaicflow__item">
                // item details
            </div>
            // more mosaicflow__item divs
        </div>
    </div>

在ajax的成功中,我附加了从脚本中获得的数据:

$(document).on('click', '#btn', function(){
    //...
    success:function(data) {
    $('.mosaicflow').append(data);
    }
});

我通过ajax从php脚本中获取数据,格式如下:

<div class="mosaicflow__item">
    // item details
</div>

更新,这里是完整的html和ajax代码:

<?php
include_once('connection.php');
$categoryName = 'Category';
$query = $pdo->prepare("SELECT * FROM items WHERE cat_name = '$categoryName' ORDER BY id DESC LIMIT 20");
$query->execute();
$items = $query->fetchAll();
$item_id = '';
if($query->rowCount() > 0) {; ?>
    <div class="mosaicflow myContainer">                
    <?php
    foreach($items as $item) { ?>
            <div class="mosaicflow__item">
                <h3><?php echo $item['name'] ?></h3>
                <p><?php echo summary($item['text']); ?></p>
                <div class="ButtonHolder">
                    <a href="link.html" class="button" style="vertical-align:middle;"><span>Link </span></a>
                </div>
            </div>
    <?php
        $item_id = $item['id'];
     } ?>
    <button name="btn_more" id="btn_more" data-item="<?php echo $item_id; ?>" class="btn btn-success form-control" >more</button>
<?php
}
else  {
    echo "<p>There are no items!</p>";
}
?>
</section>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="js/jquery.mosaicflow.js"></script>
<script>
    $(document).ready(function(){
        $(document).on('click', '#btn_more', function(){
            var last_item_id = $(this).data("item");
            $('#btn-more').html("loading...");
            $.ajax({
                url: "load_items.php",
                type: "POST",
                data: {last_item_id:last_item_id,categoryname:"<?php echo $categoryName; ?>"},
                dataType: "text",
                success:function(data)
                {
                    if (data != '') {
                        $('#btn_more').remove();
                        // Init mosaicflow
                        var container = $('.myContainer').mosaicflow();
                        // Create new html node and append to smallest column
                        var elm = $(data);
                        container.mosaicflow('add', elm);
                        //$('.mosaicflow').append(data);
                    }
                    else {
                        $('#btn_more').html("No Data");
                    }
                }
            });
        });
    });
</script>

Ajax(load_items.php):

<?php
include_once('connection.php');
$output = '';
$item_id = '';
$lastItemId = $_POST['last_item_id'];
$categoryName = $_POST['categoryname'];
$query = $pdo->prepare("SELECT * FROM items WHERE cat_name = '$categoryName' AND id < $lastItemId ORDER BY id DESC LIMIT 20");
$query->execute();
$items = $query->fetchAll();
$items_num = $query->rowCount();
if($items_num > 0) {
    foreach ($items as $item) {
        $item_id = $item['id'];
        $output .= '<div class="mosaicflow__item">';
        $output .= '<h3>' . $item['name'] . '</h3>';
        $output .= '<p>' . $item['text'] . '</p>';
        $output .= '<div class="ButtonHolder">';
        $output .= '<a href="link.html" class="button" style="vertical-align:middle;"><span>Link </span></a>';
        $output .= '</div>';
        $output .= '</div>';
    }
    $output .= '<button name="btn_more" id="btn_more" data-item="' . $item_id . '" class="btn btn-success form-control" >more</button>';
    echo $output;
}
?>

更新jQuery ajax调用

$(document).on('click', '#btn', function(){
    //...
    success:function(data) {
    data = $('<div />').append(data).find('.mosaicflow__item').html();  
    $('.mosaicflow .mosaicflow__item').append(data);
    }
});