Vue3使用Axios向PHP发送Post请求无数据,求排查解决
问题分析与解决
你的代码存在两个核心问题,导致后端无法接收并写入数据:
1. 请求格式不匹配
Axios发送POST请求时默认采用application/json格式传递数据,但PHP的$_POST超全局变量仅能解析application/x-www-form-urlencoded(表单默认格式)或multipart/form-data类型的请求体,因此直接用$_POST['titleName']无法获取JSON格式的数据。
2. PHP超全局变量大小写错误
代码中$_Server['REQUEST_METHOD']是错误写法,PHP超全局变量严格区分大小写,需改为$_SERVER['REQUEST_METHOD']。
解决方案一:后端适配JSON请求体(前后端分离场景推荐)
修改PHP代码,直接读取并解析JSON格式的请求体:
$server = "localhost"; $dbname = "Vue"; $username = "root"; $password = ""; $tblGroup = "Titles"; $dsn = "mysql:host=$server;dbname=$dbname;charset=utf8"; $id = ''; $option = [ PDO::ATTR_PERSISTENT => TRUE, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]; $method = $_SERVER['REQUEST_METHOD']; // 修正大小写错误 try{ $connection = new PDO($dsn, $username, $password, $option); if($connection){ try{ // 读取JSON请求体并转为数组 $requestData = json_decode(file_get_contents('php://input'), true); $titleName = $requestData['titleName'] ?? ''; if(!empty($titleName)){ // 使用标准INSERT语法,可读性更强 $stmt = $connection->prepare("INSERT INTO $tblGroup (titleName) VALUES (?)"); $stmt->bindValue(1, $titleName); $stmt->execute(); echo "Successful"; } else { echo "Missing titleName parameter"; } }catch(PDOException $e){ echo $e->getMessage(); } } }catch(PDOException $exception){ echo"Error Connect To Database : [ " . $exception->getMessage() . " ] "; }
解决方案二:前端修改为表单格式请求
若希望通过$_POST直接获取数据,可修改Axios配置,将数据转为表单格式发送:
// 先安装qs库:npm install qs import qs from 'qs'; axios .post('http://localhost:8888/vueBackend/connection.php', qs.stringify({ titleName:'Default' })) .then(response => console.log(response)) .catch(err=>console.log(err.message))
同时记得修正PHP中的$_Server为$_SERVER。
额外提示:你原代码中的INSERT $tblGroup SET titleName=?写法虽能运行,但更推荐使用标准的INSERT INTO 表名 (字段名) VALUES (?)语法,兼容性与可读性更佳。
内容的提问来源于stack exchange,提问作者amirali
相关产品推荐
相关产品推荐

