我正在尝试使用fetch()
API POST方法来获取PHP中的POST数据。
以下是我的尝试:
var x = "hello";
fetch(url,{method:'post',body:x}).then(function(response){
return response.json();
});
PHP:
<?php
if(isset($_GET['x']))
{
$get = $_GET['x'];
echo $get;
}
?>
这是对的吗?
答案 0 :(得分:10)
取决于:
如果你想要$_GET['x']
,你需要在查询字符串中发送数据:
var url = '/your/url?x=hello';
fetch(url)
.then(function (response) {
return response.text();
})
.then(function (body) {
console.log(body);
});
如果您想要$_POST['x']
,则需要将数据发送为FormData
:
var url = '/your/url';
var formData = new FormData();
formData.append('x', 'hello');
fetch(url, { method: 'POST', body: formData })
.then(function (response) {
return response.text();
})
.then(function (body) {
console.log(body);
});
答案 1 :(得分:8)
显然,当使用Fetch API将数据发送到PHP服务器时,您必须处理与您习惯的请求略有不同的请求。
您正在“发布”或“GETting”的数据在超级全局变量中不可用,因为此输入不是来自 多部分数据表格或应用程序/ x-www-form-urlencoded
您可以通过阅读特殊文件:php://input
来获取数据,例如使用file_get_contents('php://input')
,然后尝试使用json_decode()
解码该输入。
希望它有所帮助。
你可以在这里阅读更多相关内容:
答案 2 :(得分:2)
我使用MDN中的postData函数:
ref
您可以只发布数据,但我希望收到一个成功的回复。
return <div>
{(function(){
const C = MakeInput("textArea");
return <C value={"Baz"} ref={textAreaRef} />
})()}
</div>;
答案 3 :(得分:2)
显示如何使用 FormData 使用 fetch api 添加两个数字的工作示例。
对于每个操作,你最好有不同的 FormData 和它自己的字段。
HTML:
<html>
<head></head>
<body>
<div id="numbers_addition">
<input type="text" id="num1" placeholder="First Number">
<input type="text" id="num2" placeholder="Second Number">
<button type="button" onclick="addMyNumbers()">Add</button>
<p id="result"></p>
</div>
<script id="script_add">
function addMyNumbers()
{
let num1=document.getElementById("num1").value;
let num2=document.getElementById("num2").value;
opAddNumbers(num1, num2);
}
const frmAddNumbers = new FormData(); // create single instance
frmAddNumbers.set('cmd', "add_numbers"); // this cmd will not change
frmAddNumbers.set('first_number', "");
frmAddNumbers.set('second_number', "");
function opAddNumbers(num1, num2) {
frmAddNumbers.set('first_number', num1);
frmAddNumbers.set('second_number', num2);
fetch('./cmd.inc.php', {method: 'POST', body: frmAddNumbers})
.then(res => res.json()) // res.text()
.then(res => displayResult(res))
.catch(e => console.error('Error, opAddNumbers(), ' + e))
}
function displayResult(response)
{
console.log(response);
document.getElementById("result").innerHTML = `Result = ${response["result"]}`;
}
</script>
</body>
</html>
PHP ('cmd.inc.php'):
<?php
$cmd=$_POST['cmd'];
switch ($cmd) {
case "add_numbers":
$num1=$_POST['first_number'];
$num2=$_POST['second_number'];
$result = array("result" => $num1 + $num2);
$output = json_encode($result);
break;
}
echo $output;
答案 4 :(得分:0)
请记住,PHP 中的 $_POST
仅抓取 formData()
或 urlSearchParams()
数据,对于其他所有类型的数据,尤其是从其他文件或外部 api 数据导入的数据,您必须遵循脚步。
步骤:
file_get_contents(php://input)
接收数据json_decode($data)
对其进行解码
最后在读/写数据库之后json_encode($response)
发送响应。很简单:-))
答案 5 :(得分:0)
如果碰巧您需要使用现有的服务器, 它是用 $_POST 编码的,并期望来自正常形式的参数, 未编码为 JSON, 您可以使用表单数据,这完全可以模拟表单。
let fd = new FormData();
fd.append("var1", val)
fd.append("var2", "Hello World");
fetch('/servers/server.php', {method: "POST", body: fd})
通过这种方式,您的服务器将像从普通表单输入字段一样接收 POSTed 字段。
$var1 = $_POST['var1']; $var2 = $_POST['var2'];
答案 6 :(得分:-1)
使用$_POST
检索帖子变量。
$x = $_POST['x'];
为undefined
变量添加后备也是一种很好的做法。
$x = isset($_POST['x']) ? $_POST['x'] : 'default value';