javascript - 如何以 JSON 格式输出 pdo 结果以用于 javascript 函数?
问题描述
当我在 PHP 中回显结果时,它们似乎被正确格式化为 JSON,但是当我回显将它们保存在 JavaScript 中的变量时,我得到一个“未捕获的语法错误:意外的标识符”错误(当我删除回显时它消失了陈述)。这是代码:
$charset="utf8";
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
$page = 'nike';
$stmt = $pdo->prepare('SELECT `url`, `alt`, `model`, `desc` FROM images WHERE page_id = (select id from pages where title = ?)');
$stmt->execute([$page]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo 'results are:' . $results; //array
$json = json_encode($results);
echo 'json is: ' . $json;// seemingly correct json formatted result set
$json
如果我像这样直接在 JavaScript 中回显变量:
var imgs="<?php echo $json; ?>";
我收到“未捕获的语法错误:意外的标识符”错误消息,当我删除该行时该错误消息消失。我的 javascript 函数期望 var imgs 为:
var imgs = [
{"url": "images/adidas_large/1.png", "model": "Kumacross", "desc": ""},
{"url": "images/adidas_large/2.png", "model": "fig 2 model", "desc": "fig 2 desc"},
{"url": "images/adidas_large/3.png", "model": "fig 3 model", "desc": "fig 3 desc"},
{"url": "images/adidas_large/4.png", "model": "fig 4 model", "desc": "fig 4 desc"},
{"url": "images/adidas_large/5.png", "model": "fig 5 model", "desc": "fig 5 desc"},
{"url": "images/adidas_large/6.png", "model": "fig 6 model", "desc": "fig 6 desc"},
{"url": "images/adidas_large/7.png", "model": "fig 7 model", "desc": "fig 7 desc"},
{"url": "images/adidas_large/8.png", "model": "fig 8 model", "desc": "fig 8 desc"},
{"url": "images/adidas_large/9.png", "model": "fig 9 model", "desc": "fig 9 desc"}
];
...并在提供此硬编码时工作。所以我的问题是,如何正确输出 JSON 格式的 PDO 查询结果以用于 JavaScript 函数?
解决方案
我通过javascript而不是php中的json_encoding $results解决了这个问题并改变了
var imgs = "<?php echo json_encode($results); ?>";
至
var imgs=<?php echo json_encode($results); ?>;
推荐阅读
- gitlab - 工件是否必须上传到 gitlab 才能在阶段之间重用?
- azure - 如何使用 Powershell Get-Azvm 获取 Azure 中 VM 列表的状态
- ruby-on-rails - 帽子流产了!SSHKit::Runner::ExecuteError:在主机 xxx.xxx.xx.xx 上执行时出现异常:部署程序
- javascript - JS调用的Flask多个变量
- javascript - 如何将 .then .catch 转换为 async/await
- java - 位置更新提供用于计算距离的随机数
- variables - 将 4 维变量转换为 3 维变量 netcdf
- r - Colsums使用r中列表中索引的循环
- javascript - 打字稿承诺导致代码静默崩溃
- c - GetMessageW 正在阻塞调用线程,没有收到任何消息