【发布时间】:2019-09-11 07:36:15
【问题描述】:
我想将 JSON 数据(在本例中为客户端时间戳)发送到我的服务器。但是,我的代码似乎没有按预期工作。
我的想法是使用 fetch 将 FormData(其中包含输入以 JSON 作为值)发送到 PHP。在服务器端,PHP 会处理带有$_POST 的表单并将 JSON 字符串返回给我。
我正在使用具有 PHP 7.0 的免费主机服务进行测试。
以下所有代码都在同一个文件(404.php)中:
var now = new Date();
var pkg = JSON.stringify({
ts: now.getTime(),
tz: now.getTimezoneOffset() / -60
})
var form = new FormData();
form.set('json', pkg);
console.log(form.has('json')) // true
console.log(form.values().next()) // return and obj contain JSON string
fetch('/404.php', {
method: 'POST',
body: form
});
$json = null;
if(isset($_POST['json'])) $json = json_decode($_POST['json']);
var_dump($_POST); //Result: array(0) { }
如您所见,var_dump 的输出是一个空数组。但我希望看到的是带有 JSON 字符串的输出。
我试过另一种方法,就是这个fetch-api-json-php,但也没用。我在 Internet 上找到的所有资源通常都是关于经典 AJAX,而不是 fetch API。而且其中大多数仅适用于客户端,PHP/服务器端我找不到太多。
【问题讨论】:
-
PHP端的$_POST包含什么?你有没有 var_dump'd 的 $_POST 的内容?
-
是的,它返回空数组。
-
对不起。你张贴了。所以这不是 PHP 方面,而是 JS 方面。我假设您需要在
fetch()中发送form.values()而不是form。为确保发送了正确的数据,请在开发人员控制台的网络选项卡中检查正确的数据是否已传输到脚本。如果在请求正文中没有发送任何内容,PHP 将无法使用 -
您也可以简化操作,将
body: form.values()替换为body : {"json" : PKG}并跳过所有表单业务。 -
我不这么认为,我使用的fetch code是网上常见的。但当然,一切都值得一试。然而,什么都没有改变......