React Fetch调用CodeIgniter API无法获取POST数据问题
问题解决:React Fetch调用CodeIgniter API无法接收POST数据
问题原因
你用JSON.stringify()将数据转为JSON字符串发送,但未设置正确的Content-Type请求头,且CodeIgniter默认的$_POST数组仅会解析application/x-www-form-urlencoded或multipart/form-data格式的请求体,JSON格式的数据不会自动填充到$_POST中。Postman测试正常是因为你在Postman中可能选择了表单格式,或手动设置了正确请求头并按对应格式传参。
解决方案
方案一:客户端调整请求格式(适配CodeIgniter默认的$_POST解析)
修改React的Fetch请求,将数据转为URL编码的表单格式,并设置对应请求头:
async function submitForm() { // 转换为URL编码的表单格式 const formData = new URLSearchParams(); formData.append('first_name', enteredFirstName); formData.append('last_name', enteredLastName); formData.append('email', enteredEmail); formData.append('company_name', enteredComapanyName); formData.append('phone', enteredPhone); formData.append('company_type', cType); const response = await fetch( "url", { method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: formData, } ); console.log(await response.json()); // 需加await才能获取实际数据,否则输出Promise对象 }
此时服务器端直接用print_r($_POST)即可拿到完整参数数组。
方案二:服务器端解析JSON格式请求体
若要保持客户端用JSON格式传参,在CodeIgniter中读取php://input并解析为数组:
header("Access-Control-Allow-Origin: *"); // 读取并解析JSON请求体 $rawInput = file_get_contents('php://input'); $postData = json_decode($rawInput, true); // 解析成功则用$postData,否则 fallback 到$_POST $requestData = $postData ?: $_POST; print_r($requestData);
这种情况下,客户端需要补充设置请求头:
headers: { 'Content-Type': 'application/json', },
内容的提问来源于stack exchange,提问作者Gautam Yadav
相关产品推荐
相关产品推荐

