如何将json对象的方括号字符串化为http get的大括号内?

问题描述 投票:0回答:1

我对良好编码实践有疑问。 我有一个 chrome 扩展,它应该跟踪选项卡事件以用于开发目的。 然后,服务工作人员将嵌入在 http get 中的 json.stringified 字符串发送到服务器 php 代码,该代码将这些事件写入文件以便立即使用 PhpStorm 读取。 在浏览器上我可以分步调试服务工作人员并且 一切正常,直到突出显示的事件产生一个 srigify 无法处理的字符串:

"{"name":"突出显示","payload":{"tabIds":[1875383020],"windowId":1875382695}}"

下一步我可以监控服务器的 php 调试器上的字符串,它告诉:

{“名称”:“突出显示”,“有效负载”:{“tabIds”:=>数组

抱歉。我之前说过将刹车串起来。这是不正确的。 我的意思是我需要扩展 stringify 的功能(通过辅助函数)来将字符串转换为 http GET,然后在接收端将其转换回来。 Stringify 按预期工作,但方括号干扰 http GET,并且 PHP 端收到的请求被截断。 我想知道为什么 http GET 不喜欢它?

您将如何制定 chrome 扩展的 Service Worker 辅助函数来帮助 JSON.stringify 处理上述给定字符串(嵌套对象内包含方括号)的 http GET 请求? 正如您现在必须看到的,这一定发生在 chrome 扩展的服务工作线程中。 JSON.stringify 可以提供良好的 json 字符串,但 HTTP GET 不喜欢它。 所以我想在这里使用 GET 然后我必须制定该字符串以便 当它到达 php 时,它仍然包含所有基本字段。 现在它在第一个方括号处被剪切。

我看到数组中只有一个元素,但我正在寻找可能包含许多元素的解决方案,以便重用代码。 这是为 GET 创建字符串的 Service Worker 处的断点。

enter image description here

编码方式如下: enter image description here

function handleEvent(name, payload) {
    var load  = JSON.stringify({name, payload})
    const encoded = encodeURI(load);
    fetch('http://localhost:80/tabs_report/tabs_query_report.php?'+load);
}

然后 $_SERVER 显示: enter image description here

PHP 的运行方式(带有调试覆盖)如下: enter image description here

获取和请求: enter image description here

我想知道完整的信息是如何包含在 $_SERVER 中但在 GET 和 REQUEST 中丢失的。

javascript php json http get
1个回答
0
投票

URL 查询字符串应该是 form-encoded,而不是 JSON 编码。 PHP 尝试将 URL 查询字符串解码为

$_GET
,但要做到这一点,查询字符串必须进行表单编码。 PHP 不希望 JSON 作为查询字符串。您最终得到的是查询字符串的一些或多或少随机的解释。这不应该起作用。

将 JSON 字符串作为查询字符串发送,然后在 PHP 端对其进行正确的 JSON 解码:

var load  = JSON.stringify({name, payload})
const encoded = encodeURIComponent(load);
fetch('http://localhost:80/tabs_report/tabs_query_report.php?data='+load);
$data = json_decode($_GET['data']);
foreach ($data as $key => $value) ...
© www.soinside.com 2019 - 2024. All rights reserved.