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

js fetch post工作正常,但php为空[重复]

宰父保臣
2023-03-14

我有这个取法

loginbutton.onclick = (e)=> {
    e.preventDefault();
    var creds = {
        login: login.value,
        pass: pass.value
    }
    
    fetch('functions/asklogin.php', {
        method: "POST",
        header: {"Content-type": "application/json; charset=UTF-8"},
        body: JSON.stringify(creds)
    })
    .then(resp => resp.text())
    .then(data => console.log(data));
}

当我点击时,我的xhr身体已经吃饱了:

但是,如果我尝试从asklogin.php中回显这些参数

echo "no".$_POST['pass'].":".$_POST['login'];

我得到的只是否:

谢谢你的帮助

共有1个答案

山高峰
2023-03-14

$_POST在PHP将识别唯一的表单数据(应用程序/x-wow-form-urlencodedMultipart/form-data)与指定的内容类型头。

对于任何其他内容类型,您都需要使用php://input读取和解析数据。

对于您的情况,更改通过fetch发送的数据应该可以解决问题。

...
fetch('functions/asklogin.php', {
    method: "POST",
    header: {"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"},
    body: Object.entries(creds).map(([k,v])=>{return k+'='+v}).join('&') // in jQuery simply use $.param(creds) instead
})
...

另一种解决方案是改变PHP端读取数据的方式

...
if( is_empty($_POST) ){ $_POST = json_decode(file_get_contents('php://input', true)) }
...
 类似资料:
  • 问题内容: 我试图通过使用该方法销毁所有会话变量,但是在使用此方法之后,这些值不会被销毁。 为什么不工作? 还有其他方法可以销毁PHP中的会话吗? 问题答案: 使用后,会话将在后台被销毁。由于某种原因,这不会影响已为此请求填充的中的值,但在以后的请求中将为空。 如果需要,您可以手动清除()。

  • 我在让Ajax正常工作方面遇到了问题。在我这里的xhtml文件中,我使用Ajax来呈现一些启用或禁用的输入,它可以正常工作。然而,更进一步,我还使用Ajax来呈现包含的xhtml文件,其中包含一个控件,并用id=“photoEnabled”标记。如果未选中该复选框,则会在其位置显示id=“photoDisabled”标记的虚拟显示,只是为了在页面上呈现整洁,并且该显示被禁用。 出于某种原因,这不起

  • 访问我之前的问题看看我的配置 Spring mvc Spring MVC 控制器工作但没有创建指定的响应 URL,它是从请求映射字符串创建 url 现在在jsp页面中面临一个奇怪的错误 控制器类方法是 我获得了请求的jsp页面,但jsp中名为“branches”的模型为空。我在控制台中得到的列表大小为140。所以这意味着返回的模型在' branchshow.jsp '中是空的 我检查了很多链接,都

  • 问题内容: 我正在尝试通过CORS将表单数据从www.siteone.com发布到www.sitetwo.com。我的ajax代码是这样的: 并且文件cors.php 如下: 但是仍然会引发Access-control-Allow-Origin错误。引发的错误是这样的: 我知道,通过仅通过标头允许远程网站来使用CORS,就可以使用跨域请求。但是当我这样尝试时,会引发错误。我在这里错过了什么吗?这是

  • 我有一个很长的表单,表单的内容是通过邮件(HTML电子邮件)发送的。 我的PHP邮件函数在其余的内容中工作得很好。但当我将以下内容添加到邮件正文时,邮件就不工作了。 基本上,我得到的。 邮件头为

  • 按下键时的示例输出不起作用: