我是JSON的新手,但已经阅读了网上的几个教程(例如http://www.copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-it/)。在我的网站的一个页面上,我生成了一组缩略图,并通过json对其进行编码,如下所示:
<?php //lots of code
$sqlTh = mysqli_query($cxn, "SELECT thumb FROM video WHERE status = 'active'");
$jsonTh = array();
while ($row = mysqli_fetch_assoc($sqlTh)){
$jsonTh[] = json_encode(array($row));
}
?>
然后我声明全局var thumb并使用document.ready(function()来调用我的缩略图加载函数:
<script type="text/javascript">
var thumbs = '<?php echo json_encode($jsonTh) ?>';
</script>
<script type="text/javascript">
$(document).ready(function () {
loadThumbs();
});
</script>
函数loadThumbs()位于外部文件中......可以提醒JSON字符串,其长度显示如下:
function loadThumbs() {
alert(thumbs); //No problem
alert(thumbs.length); //No problem
}
我可以看到JSON字符串......警报输出如下所示:
["[{"thumb":"thumbnail1.jpg"}"]", etc , etc , etc }"]"]
1756 //(string length)
现在我想做的就是看到字符串/数组的每个成员.....我试过警告以下内容:
function loadThumbs() {
alert(thumbs[2].thumb);
}
但警报输出是“未定义”。然后我尝试使用for循环遍历数组并为数组的每个成员设置变量的解决方案:
function loadThumbs() {
for (var i = 0, len = thumbs.length; i < len; i++) {
var th = thumbs[i];
alert(th);
}
}
然而,这会警告数组的所有1756个字符而不是每个.jpg文件名。将功能稍微更改为以下功能不会发出任何警报(根本没有警报框):
function loadThumbs() {
for (var i = 0, len = thumbs.length; i < len; i++) {
var th = thumbs[i].thumb;
alert(th);
}
}
我知道一个解决方案是在JSON字符串上使用js split()函数,但我想知道我在哪里出错而不使用split()函数。有人可以对此有所了解吗?我将不胜感激任何帮助......谢谢!
答案 0 :(得分:1)
我不是PHP专家,但是从你的代码我看到你正在创建一个JSON编码字符串数组,每行一个,然后你JSON编码整个数组,所以你得到的输出就是你的应该期待。
更重要的是,你忘了JSON解码javascript端的字符串。
尝试更改您的代码:
<?php //lots of code
$sqlTh = mysqli_query($cxn, "SELECT thumb FROM video WHERE status = 'active'");
$jsonTh = array();
while ($row = mysqli_fetch_assoc($sqlTh)){
$jsonTh[] = array($row); //don't encode each row!!
}
?>
<script type="text/javascript">
$(document).ready(function () {
//use JSON.parse to re-decode on the javascript side
var thumbs = JSON.parse('<?php echo json_encode($jsonTh) ?>');
for (var i = 0, len = thumbs.length; i < len; i++) {
var th = thumbs[i].thumb;
alert(th);
}
}
</script>
你应该像你期望的那样得到所有拇指的警报。 请注意,如果Thumb属性预计包含撇号,则必须在js侧转义它们。
答案 1 :(得分:0)
在您的示例中,您的语法不正确:
["[{"thumb":"thumbnail1.jpg"}"]", etc , etc , etc }"]"]
确保引号围绕标识符和值:
"thumb": "thumbnail1.jpg"
在你的例子中:
[[{"thumb":"thumbnail1.jpg"}], "etc" , "etc" , "etc" }]]
永远不要在大括号或括号旁边加上引号......
DON'T DO THIS: "[" "]" OR "{" "}"
祝JSON好运!