这是我第一次尝试使用Fetch API,我在向PHP服务器发送POST数据的过程中遇到了问题。
我正在摆脱$.ajax
,尝试使用纯JavaScript解决与不同服务器(有时是本地的,有时不是)通信的问题。现在我正在尝试理解Fetch API,即使它很简单和直观,但我遇到了一个奇怪且意外的问题:
我无法向PHP服务器发送JSON post请求
我可以将form-data post请求发送到本地PHP
我无法将form-data post请求发送到Web URL PHP
我可以从上述所有内容(显然)检索数据,但奇怪的是什么都没有到达。$_SERVER['REQUEST_METHOD']
通过我可以看到,当我使用本地路径时,我得到了我所要求的“POST”,但当我使用Web URL时,由于某种我不理解的原因,它会更改为GET
。
url="/";
url="www.something.com";
fetch(url, {
method: 'POST',
body: JSON.stringify({
test: "toast",
})
})
.then(function(response) {
return response.text();
})
.then(function(data) {
console.log(data);
});
我只想以一种稳定和清晰的方式发送和接收数据,不需要使用jquery、库等。我只想发送一个JSON {"test":"toast"}
并在检查$_POST
变量时在PHP文件中找到它。
更新
本地和Web URL的问题似乎在于这个差异: www.something.com/test => www.something.com/test/index.php。 没有index.php出现了某些原因后拒绝了POST数据(但仍然读取了echoed信息)。但关于JSON的问题仍然存在。
我无法将JSON post发送到PHP
我可以将表单数据post发送到PHP
更新
我发现$_POST和$_GET与Fetch API不兼容。您必须使用php://input来获取发送到服务器的所有数据。
不知道为什么。有更好的解决方案吗?为什么ajax和XMLHttpRequest没有这种问题?
注意: 如果您希望数据被识别为json,您必须通过头指定,即使以前从未请求过,那么现在为什么? Fetch API是否缺少某些内容?
header('Content-Type: application/json');
$test=json_decode(file_get_contents("php://input"));
//some code
echo json_encode($test);