加载更多包含 blob 图像的项目


Load more projects with blob images in it

我在我的网站上显示项目,但不是一次显示所有项目,我正在使用"显示更多"按钮,该按钮使用 ajax 加载更多项目。但是我似乎无法打印出已加载项目的图像,因为它是 blob 图像。另一个问题是我不知道如何一次打印出 2 个项目,现在我一次只加载 1 个项目。

阿贾克斯

$('#show-more').on("click", function(e){  
  e.preventDefault();
  var lastID = $("#projects ul").children().last().attr('id');
  $.ajax({
    url: "ajax/show-more.php",
    type: "POST",
    data: {"lastID": lastID},
    dataType:"json"
  })
  .done(function( msg ){
    if (msg.succes == true) {
        $('#projects ul').append(
            "<li class='project' id='"+msg.project.id+"'>"+
                "<img src='data:image/jpg;base64, "+msg.project.image+"' alt='work'>"+
                "<div class='mask fade'>"+
                        "<h4>"+msg.project.titel+"</h4>"+
                        "<p>"+msg.project.text+"</p>"+
                "</div>"+
            "</li>"
        );
    }
  });
});

显示更多.php

<?php 
try {
    $db = mysqli_connect("localhost","root","","portfolio");
    $lastID = $_POST["lastID"];
    $sql = "SELECT * FROM work WHERE filter = 'webdesign' AND id < ".$lastID." ORDER BY id desc LIMIT 2";
    $results = mysqli_query($db,$sql);
    foreach ($results as $result) {
        $response["project"] = $result;
    }
    $response["succes"] = true;
} catch (Exception $e) {
    $response["succes"] = false;
}
echo json_encode($response);
?>

如果你想要多个结果,将行保存在一个数组中,也可以对 base64 对图像数据进行编码

foreach ($results as $result) {
    $result["image"] = base64_encode($result["image"]);
    $response["project"][] = $result;
}

然后循环浏览结果

$.each(msg.project, function(){
    $('#projects ul').append(
        "<li class='project' id='"+this.id+"'>"+
            "<img src='data:image/jpg;base64, "+this.image+"' alt='work'>"+
            "<div class='mask fade'>"+
                    "<h4>"+this.titel+"</h4>"+
                    "<p>"+this.text+"</p>"+
            "</div>"+
        "</li>"
    );
});

我建议您应该将图像存储为文件而不是 blob 并将路径存储在数据库中,以便您可以轻松使用它。顺便说一句,如果数据不是由base64编码的,则base64将无法工作