我对良好编码实践有疑问。 我有一个 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 处的断点。
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 中但在 GET 和 REQUEST 中丢失的。
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) ...