【问题标题】:Display BLOB image from db using JSON使用 JSON 显示来自 db 的 BLOB 图像
【发布时间】:2018-06-24 06:05:14
【问题描述】:

我尝试使用 JSON 显示我的图像,但我得到了

未捕获的语法错误:JSON 输入意外结束

作为一个错误。我尝试了很多事情,很多方法来解决它,但我失败了。我可以显示文本(来自没有图像(BLOB)的表,我对其进行了测试),但是当我尝试使用包含图像的表时出现错误。

这是我的代码:

PHP - 用于获取图像:

<?php
header("Content-Type: application/json; charset=UTF-8");
//header('Content-Type:image/jpeg');
$obj = json_decode($_GET["x"], false);

$conn = new mysqli("localhost", "abu", "aburefko159753", "btt");
$result = $conn->query("SELECT * FROM " . $obj->table . " LIMIT " . $obj->limit);
$output = array();
$output = $result->fetch_all(MYSQLI_ASSOC);

echo json_encode($output);
?>

用于显示图像的 HTML 和 JS 代码:

<script>
        var obj, dbParam, xmlhttp;
        obj = { "table":"bestPlaces", "limit":4 };
        dbParam = JSON.stringify(obj);
        xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("demo").innerHTML = this.responseText;
                console.log(this.responseText);
                var myObj = JSON.parse(this.responseText);
                document.getElementById("demo2").innerHTML = myObj[0].ID;
                console.log(myObj[0].ID);
            }
        };
        xmlhttp.open("GET", "getPlaces.php?x=" + dbParam, true);
        xmlhttp.send();

    </script>
  <p id="test"></p>
  <p id="test2"></p>

当我使用另一个没有图像的表时,相同的代码可以正常工作,输出将是:

[{"ID":"1","name":"test bez session","content":"abu test test"},
 {"ID":"2","name":"test bez session","content":"abu test test"},
 {"ID":"3","name":"test bez session","content":"test test 2"},
 {"ID":"4","name":"test bez session","content":"abu juhu test"}
]

1

但是当我使用带有图像的表格时它会崩溃。有什么帮助吗?

【问题讨论】:

  • 它因 WHAT ERROR 而崩溃
  • @RiggsFolly 我将错误消息放在问题中...未捕获的语法错误:JSON 输入意外结束
  • 我不知道答案,但我猜JSON包含一个或多个图像时太大了
  • 那么你推荐我用什么来代替 json?我正在尝试使用我数据库中的一些图像制作轮播(幻灯片)。你可能知道更好的方法。

标签: javascript php jquery html json


【解决方案1】:

console.log(this.responseText); 是否显示完整的 JSON 输出?

我的猜测是您在二进制数据上遇到了 json_encode 或 JSON.parse 问题。尝试使用 base64 对其进行编码:

$output['imageCol'] = base64_encode($output['imageCol']);
echo json_encode($output);

其中imageCol 是BLOB 列的名称,然后在JS 中:

var myObj = JSON.parse(this.responseText);
myObj.imageCol = atob(myObj.imageCol);

【讨论】:

  • console.log(this.responseText) 当我使用没有图像的表格时工作正常,但是当它使用图像时它什么也不输出。我尝试使用 base64_endoce 但它显示错误 img(表中的 blob 列)未定义(PHP 错误)。然后我尝试只使用你为 JS 编写的代码,但它仍然显示之前的错误 'Uncaught SyntaxError: Unexpected end of JSON input'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 2022-09-24
  • 2011-05-27
相关资源
最近更新 更多