我想将JSON数据(在本例中是客户端时间戳)发送到我的服务器。然而,我的代码似乎没有像我期望的那样工作。
我的想法是使用fetch将FormData(包含以JSON为值的输入)发送到PHP。在服务器端,PHP将使用$_post
处理表单,并将JSON字符串返回给我。
我正在使用一个免费的主机服务,它有PHP7.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/服务器端我找不到太多。
这对我很管用:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<script>
var pkg = '{"test":"data"}';
var formData = new FormData();
formData.set('json', pkg);
fetch('./404.php', {
method: 'POST',
body: formData
});
</script>
</head>
<body>
</body>
</html>
PHP:
<?php
$json = null;
if(isset($_POST['json']))
$json = json_decode($_POST['json']);
var_dump($_POST, $json);
// Result: array(1) { ["json"]=> string(15) "{"test":"data"}" } object(stdClass)#1 (1) { ["test"]=> string(4) "data" }
?>
您能尝试在您的本地计算机中运行此代码吗?
制作一个文件名55788817.php并粘贴此代码并运行。
<?php
if (isset($_POST) && !empty($_POST)) {
$json = null;
if(isset($_POST['json'])) $json = json_decode($_POST['json']);
var_dump($_POST); //Result: array(1) { ["json"]=> string(29) "{"ts":1555915560755,"tz":5.5}" }
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<button type="button" id="registerButton">Click Me!</button>
<script>
var now = new Date();
var pkg = JSON.stringify({
ts: now.getTime(),
tz: now.getTimezoneOffset() / -60
})
var form = new FormData();
form.append('json', pkg);
console.log(form.has('json')) // true
console.log(form.values().next()) // return and obj contain JSON string
fetch('./55788817.php', {
method: 'POST',
body: form
});
</script>
</body>
</html>
问题内容: 当我的PHP脚本从AJAX POST请求接收数据时,变量将被转义。真正奇怪的是,这仅发生在我的生产服务器上(在Linux上运行PHP 5.2.12),而不在我的本地服务器(在Windows上运行PHP 5.3.1)上发生。 这是AJAX代码: 这有什么原因吗?以及如何解决此问题,使其在两台服务器上均可工作? 编辑:我具有magic_quotes的以下设置: 问题答案: 您可能已在Lin
问题内容: 当我的PHP脚本从AJAX POST请求接收数据时,将对变量进行转义。真正奇怪的是,这仅发生在我的生产服务器(在Linux上运行PHP 5.2.12)上,而不在我的本地服务器(在Windows上运行PHP 5.3.1)上发生。 这是AJAX代码: 这有什么原因吗?我应该如何解决这个问题,使其在两台服务器上都能正常工作? 编辑:我对magic_quotes具有以下设置: 问题答案: 您可
问题内容: 我有1个表单,里面有多个复选框(每个都有代码): 数据库中的主键在哪里- 因此每个值都不同。 我如何知道已经选中了哪些复选框?(也许多个) 这是针对收件箱系统的,我下面有一个按钮,我希望(单击时)删除选中了复选框的所有消息(标识:)。 问题答案: 在表单中将名称设置为,您将能够以array()的形式访问所有复选框。 以下是根据要求提供的一些示例:
我正在尝试将数据从DialogFraank发送到创建此对话框的Fraank。在目标片段中,我使用以下代码: 我还在fragment实现了我的接口: 在DialogFragment中,我使用以下代码: 并发送数据: 我还试图从这个问题中使用onActivityResult(): 接收数据: 但我没有收到数据:(((
由于找不到文件,send方法返回null BufferedReader。Eclipse只是说有一个NullPointerException是因为print方法,但是当我移除所有try/catch语句时,Eclipse说我需要编写方法抛出IOException或FileNotFoundException,它也允许我这样做,如果我不这样做,它就抛出一个FileNotFoundException。然而,