Vue.js中使用axios.post提交的FormData数据无法在PHP的if语句中正常处理
解决FormData请求在PHP中无法获取参数的问题
嘿,我一眼就看出问题所在啦!你前端用FormData发送请求,但后端却用json_decode去解析请求体,这俩格式不匹配,难怪拿不到数据~
问题根源
当你用FormData传递数据时,请求的Content-Type是multipart/form-data(表单编码格式),而不是application/json。这时候php://input里的内容是表单的编码字符串,不是标准的JSON,所以json_decode解析后返回null,自然没法通过$requestBody['action']获取值。
解决方案一:继续使用FormData(推荐,适合文件上传等场景)
直接用PHP内置的$_POST全局数组就能拿到FormData里的参数,不需要手动读取php://input。修改你的PHP代码:
// 先判断参数是否存在,避免报错 if(isset($_POST['action']) && $_POST['action'] == 'GetOperator'){ echo 'executed'; }
解决方案二:改用JSON格式发送请求
如果你更想用JSON传递数据,需要调整前端代码,直接发送JSON对象并设置正确的请求头:
axios.post(BaseUrl + 'core/core.php', { action: 'GetOperator' }, { headers: { 'Content-Type': 'application/json' } }) .then((res) => { console.log(res); this.loading = false; }) .catch((error) => { console.log(error); });
这时候你原来的PHP代码就可以正常工作了,因为请求体是标准JSON字符串,json_decode能正确解析成数组。
额外小提示
- 可以在PHP里用
var_dump($_POST)先看看有没有拿到数据,排查问题更高效 - 如果涉及大文件或大量数据,记得检查PHP配置里的
post_max_size和upload_max_filesize,避免请求被拦截
内容的提问来源于stack exchange,提问作者Aly
相关产品推荐
相关产品推荐

