首页 > 解决方案 > 来自数组的 JSON 未正确解析

问题描述

我将我的 mysql 结果发送到关联数组,然后使用 JSON 进行编码

$showDisplayResult = $mysqlConn->query($getDisplayPage);
while($row=mysqli_fetch_assoc($showDisplayResult))
    {
        $rows[] = $row;
    }
$showDisplays = json_encode($rows);

在我的主页中,我使用 javascript 来抓取它,解析它并将正确的变量附加到我的 URL 中。该功能似乎有效,但它只显示未定义为 URL 中的变量。

这是javascript:

<script type="text/javascript">

let obj = <?php echo $showDisplays; ?>;

//obj = JSON.parse(obj);

let params = new URL(document.location).searchParams;
params.set("pageID", obj.pageID);
params.set("display", obj.display_id);
let url = window.location.href.split('?')[0];
let nextURL = url + "?" + params.toString();
window.setTimeout(function () {
    window.location.href = nextURL;
}, obj.duration * 1000);

console.log(obj);
</script>

所以我的网址现在是 showDisplay.php?display=undefined&pageID=undefined

我怎样才能让它正确解析 JSON?

更新:

如果我回显 $showDisplays,这是打印的 JSON:

[{"pageID":"104","page_type_id":"1","display_id":"3","slide_order":null,"duration":"56","active":"1","background_img":null,"panel_id":"96","panel_type_id":"1","page_id":"104","cont_id":"148","contID":"148","content":"\r\n\r\n\r\n<\/head>\r\n\r\nThis is full content<\/p>\r\n<\/body>\r\n<\/html>"},{"pageID":"116","page_type_id":"1","display_id":"3","slide_order":null,"duration":"54","active":"1","background_img":"images\/BG_spring.svg","panel_id":"113","panel_type_id":"1","page_id":"116","cont_id":"165","contID":"165","content":"\r\n\r\n\r\n<\/head>\r\n\r\nThis background should be green<\/p>\r\n<\/body>\r\n<\/html>"}]

因此,在页面加载时,我希望 urldisplay=3&pageID=104在 56 秒(其持续时间)后刷新,并且 URL 应该display=3&pageID=116为 54 秒,然后保持循环

标签: javascriptphpjson

解决方案


如果我正确阅读代码,$showDisplays是行对象数组,而不是单行对象。然而,JavaScript 会尝试访问行对象的属性,就好像它们在其包含数组中一样,obj.

如果要访问数组中第一行对象的属性,可以这样做:

params.set("pageID", obj[0].pageID);
params.set("display", obj[0].display_id);

下一行对象将位于下一个索引处obj[1]。因此,为了按顺序获取所有行对象,您将遍历它们。


推荐阅读