Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $\使用formData提交表单后,php中的POST数组为空_Javascript_Php_Arrays_Forms_Post - Fatal编程技术网

Javascript $\使用formData提交表单后,php中的POST数组为空

Javascript $\使用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)仅输

我看过好几篇关于这个问题的帖子,但都没有解决我的问题。我正在使用XAMPP,在同一个文件夹中有一个html
index.html
和一个php
remote.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中的文件中,正如预期的那样。