当前位置: 首页 > 知识库问答 >
问题:

在php中使用formData提交表单后$_POST数组为空

干茂才
2023-03-14

我看过几个关于这个问题的帖子,但没有一个能解决我的问题。我正在使用XAMPP,在同一个文件夹中有一个htmlindex.html和一个phpremote.php

我要发送给php的FormData是使用JavaScript中的表单(basic_form)创建的。由于console.log(...formdata);按预期打印了Array[“mode”,“basic”],Array[“File”,File],它们是字符串和输入文件,因此构造良好。

但不幸的是,在php中,命令print_r($_post);只输出array(),命令var_dump($_post);也输出array(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>

这里的php打印内容的表单:

<?php
    var_dump($_POST);
    $datapost = $_POST;
    print_r($datapost);
    print($datapost["mode"]);
?>

共有1个答案

程天佑
2023-03-14

首先,调用fetch,它发出POST请求

当您得到一个响应时,您将记录响应对象(它不包含任何有用的东西,特别是响应的主体将显示为可读流而不是字符串)。

该响应确实显示数组(1){[“mode”]=>string(5)“basic”}数组([mode]=>basic)basic不过,您可以使用浏览器开发人员工具的“网络”选项卡看到它。

记录响应后,您设置location.replace(response[“URL”]);,它发出GET请求(指向同一URL)并将浏览器导航到该请求。

GET请求是一个不同的请求,并且没有来自它的POST请求的请求体。

由于这是一个不同的请求,它得到了不同的响应,现在$_post是一个空数组。

如果您想导航到响应,那么就去掉JavaScript。只需使用表单发出POST请求,并让浏览器呈现结果页面。

如果您想使用Ajax发出请求,那么:

  • 不要立即离开页面
  • 对响应执行一些有用的操作(首先调用response.text()将数据从响应正文中取出,然后可能使用createElementappendChild和friends将数据添加到当前文档)
 类似资料:
  • 问题内容: 我的问题是,当上一页由表单创建时,后退按钮会使浏览器说“页面已过期”。 例: 第1页:使用搜索条件提交的表单($ _POST请求,该表单指向第2页) page2:接收$ _POST请求并显示结果(带有链接的用户列表,指向page3) 第3页:显示用户个人资料 现在,当访客单击浏览器中的“后退”按钮时,它将显示类似“页面已过期”的信息。 而是应该在没有警告的情况下显示前一页(第2页,带有

  • 这是我的第一次。php页面是html部分。我有一个表单,包括一个div和一个submit按钮。我希望当点击按钮时,打开一个新页面(second.php)并显示div的内容(id=orderList) 这是javascript部分; 这是第二.php我想在div(id=confirmForm)中显示内容的地方 不管用,我该改什么?

  • 我是新的PHP Codeigniter框架。我正在设计一个页面,其中我使用了一个链接。点击链接时,它调用一个jQuery函数,通过jQuery提交表单。我已经使用codeigniter表单验证方法进行服务器端验证,目前我已经禁用了客户端验证。 问题是,在这个过程中,当表单通过jQuery提交时,codeigniter表单验证方法不起作用。 但是如果我使用submit按钮来提交表单,那么codeig

  • 我有一个来自WordPress的contact-template.php文件... 表单有4个必填字段... 现在,如果任何或所有必填字段为空,表单将不会提交,用户将在每个为空的文本输入字段下面得到“此字段是必填的”消息。-这完全是我想要的 我遇到的问题是,当填写所需的字段,并点击“提交”按钮时,会有10-15秒的停顿,然后显示“谢谢你,我们会尽快回复你”的消息。 由于这种暂停,用户会多次单击su

  • 对此非常新,我目前正在尝试为我的网站创建一个登录系统。我已经创建了一个html日志表单,我计划使用该表单为用户创建帐户。我已经创建了一个php页面,其中包含了我要连接到服务器的代码,如下所示。 当我填写表单时,我没有得到任何输出。我不确定php代码是在错误的地方(它是作为一个单独的文件)还是不期望输出。提交表单时,当我在测试时手动提交时,数据库似乎不会发生变化。 我的最终目标是能够将用户添加到数据

  • 每当我调试$_post时,它包含所有表单属性,但类型为'submit'和名称为'submitform'的输入字段除外。 如果我将输入字段的名称更改为“submit”,那么$_post也会显示提交输入的键值对。 我不知道它像苏。 有人能帮我解决这个吗?