Javascript $\使用formData提交表单后,php中的POST数组为空
我看过好几篇关于这个问题的帖子,但都没有解决我的问题。我正在使用XAMPP,在同一个文件夹中有一个htmlJavascript $\使用formData提交表单后,php中的POST数组为空,javascript,php,arrays,forms,post,Javascript,Php,Arrays,Forms,Post,我看过好几篇关于这个问题的帖子,但都没有解决我的问题。我正在使用XAMPP,在同一个文件夹中有一个htmlindex.html和一个phpremote.php 我想发送给php的formData是使用javascript中的表单(basic\u form)创建的。由于console.log(…formData),因此它的结构良好按预期打印数组[“mode”,“basic”],数组[“file”,file],它们是字符串和输入文件 但不幸的是,在php中,命令print\r($\u POST)仅输
index.html
和一个phpremote.php
我想发送给php的formData
是使用javascript中的表单(basic\u form
)创建的。由于console.log(…formData),因此它的结构良好代码>按预期打印数组[“mode”,“basic”],数组[“file”,file]
,它们是字符串和输入文件
但不幸的是,在php中,命令print\r($\u POST)
仅输出Array()
和命令var\u dump($\u POST)代码>输出数组(0){}
。因此,表单的内容似乎没有传递给php
这是html表单:
<body>
<div>
<form name="basic_form" enctype="multipart/form-data" action="remote.php" method="post">
<input type="text" id="mode" name="mode" value="basic"/>
<input type="file" id="file" name="file"/>
<input type="submit" id="submit_basic_input" name="submit_basic_input" value="Submit"/>
</form>
</div>
</body>
下面是提交表单的javascript:
<script>
var basic_form = document.forms["basic_form"];
basic_form.addEventListener('submit', e => {
e.preventDefault();
const url = 'remote.php';
const formData = new FormData(basic_form);
fetch(url, {
method: 'POST',
body: formData
}).then(response => {
console.log(response);
if(response["status"] == 200)
location.replace(response["url"]);
});
});
</script>
var basic_form=document.forms[“basic_form”];
基本表单。addEventListener('submit',e=>{
e、 预防默认值();
constURL='remote.php';
const formData=新formData(基本表单);
获取(url{
方法:“POST”,
正文:formData
})。然后(响应=>{
控制台日志(响应);
如果(响应[“状态”]==200)
位置。替换(响应[“url”]);
});
});
下面是打印表单内容的php:
<?php
var_dump($_POST);
$datapost = $_POST;
print_r($datapost);
print($datapost["mode"]);
?>
首先,调用fetch
发出POST请求
当您得到响应时,您将记录响应对象(它不包含任何有用的内容,特别是响应主体将显示为可读流而不是字符串)
该响应确实显示array(1){[“mode”]=>string(5)“basic”}数组([mode]=>basic)basic
但是,您可以使用浏览器开发工具的网络选项卡查看它
记录响应后,设置location.replace(响应[“url]”)代码>,它发出GET请求(到同一URL)并将浏览器导航到该URL
GET请求是一个不同的请求,没有来自它的POST请求的请求正文
因为它是一个不同的请求,所以它得到不同的响应,现在$\u POST
是一个空数组
如果您想导航到响应,那么就去掉JavaScript。只需使用表单发出POST请求,并让浏览器呈现结果页面
如果要使用Ajax发出请求,请执行以下操作:
- 不要立即离开页面
- 对响应执行一些有用的操作(首先调用
response.text()
从响应正文中获取数据,然后可能使用createElement
、appendChild
和friends将数据添加到当前文档中)
非常感谢,我错过了一个事实,我正在做一个POST和一个GET请求(老实说,location.replace(response[“url”]);
来自一个模板,我不认为它有害)。在POST请求之后,我成功地将$\u POST
的内容保存到php中的文件中,正如预期的那样。