You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter3使用fetch发送数据到控制器为null如何解决

问题原因

  • 错误配置请求头:你使用FormData传递表单数据,却手动设置Content-Type: application/json,导致PHP无法正确解析请求体,CodeIgniter的$this->input->post()自然读取不到参数。使用FormData时不需要手动设置Content-Type,浏览器会自动生成带边界标识的正确multipart/form-data请求头。
  • 多余的no-cors配置:同域请求不需要开启该模式,开启后反而会限制你对响应内容的读取权限。
  • 测试逻辑错误:你点击按钮后发起的是POST请求,但后续window.open是新开页面以GET方式访问控制器接口,GET请求没有携带任何POST参数,你看到的null是GET请求的返回结果,不是之前POST请求的返回。

修复方案

1. 前端代码修改

删除错误的请求头和no-cors配置,取消无意义的window.open跳转,直接在控制台查看POST请求的返回即可:

let formData = new FormData()
formData.append('testing', 'isi testing')

const button = document.querySelector('#kirimkecontroller')
button.addEventListener('click', () => {
    fetch("<?= base_url(); ?>welcome/kiriman_dari_fetch", {
        method: "POST",
        body: formData,
    }).then(res => res.json())
    .then(data => console.log('接口返回:', data))
    .catch(e => console.log('请求失败:', e));
})

2. 控制器代码无需调整

修改前端后原有控制器逻辑即可正常读取参数:

public function kiriman_dari_fetch()
{
    $testing = $this->input->post('testing');
    echo json_encode($testing);
}

补充:如果你需要传递JSON格式数据

如果你的业务场景需要传JSON而不是表单数据,就不要使用FormData,调整写法如下:

前端代码

fetch("<?= base_url(); ?>welcome/kiriman_dari_fetch", {
    method: "POST",
    headers: {
        "Content-Type": "application/json"
    },
    body: JSON.stringify({
        testing: 'isi testing'
    })
})

控制器代码

CodeIgniter3原生不支持解析JSON格式的POST请求,需要手动读取原始请求体解析:

public function kiriman_dari_fetch()
{
    $rawInput = file_get_contents('php://input');
    $params = json_decode($rawInput, true);
    $testing = $params['testing'] ?? null;
    echo json_encode($testing);
}

内容的提问来源于stack exchange,提问作者frsnmk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:27:02