
本教程旨在解决javascript使用fetch api发送`application/x-www-form-urlencoded`类型post请求时,php后端无法正确接收数据的问题。核心在于php脚本错误地从url查询字符串中解析数据。我们将详细介绍如何利用`$_post`超全局变量正确访问post数据,并提供修正后的javascript和php代码示例,同时强调数据安全和sql注入防护的重要性。
理解POST数据传输机制
在Web开发中,客户端(如浏览器中的JavaScript)通过HTTP请求与服务器进行数据交互。fetch API是现代JavaScript中用于发起网络请求的强大工具。当使用POST方法时,请求体(Request Body)是承载要发送到服务器的数据的主要部分。
Content-Type: application/x-www-form-urlencoded是一种常见的MIME类型,它指示请求体中的数据是以URL编码的键值对形式(例如param1=value1¶m2=value2)发送的。这种格式类似于HTML表单的默认提交方式。
对于PHP服务器端,当接收到Content-Type为application/x-www-form-urlencoded的POST请求时,PHP会自动解析请求体中的数据,并将这些键值对填充到$_POST超全局数组中。这意味着,开发者可以直接通过$_POST['key']的形式访问客户端发送的数据。
问题分析:为什么PHP收不到数据?
原始的PHP代码尝试通过$_SERVER['REQUEST_URI']获取当前请求的完整URL,然后使用parse_url函数解析URL的各个部分,最后通过parse_str函数从URL的查询字符串($parts['query'])中提取数据。
立即学习“PHP免费学习笔记(深入)”;
这种处理方式是针对GET请求参数的典型做法,例如访问http://example.com/add.php?name=test&contact=123时,name和contact会出现在URL的查询字符串中。然而,对于POST请求,尤其是当数据放在请求体中发送时,这些数据并不会出现在URL的查询字符串中。因此,尝试从URL中解析POST请求体的数据是无效的,导致PHP脚本无法获取到预期的参数,从而返回undefined或空值。

正确的做法是利用PHP提供的$_POST超全局变量,它专门用于收集HTTP POST方法提交的数据。
标签: mysql php javascript word java html js json 编码 浏览器 app 工具 后端
还木有评论哦,快来抢沙发吧~