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

Codeigniter 4中AJAX联系表单提交报404 无法找到对应API路由

问题解决方法

导致提交表单404的常见原因和对应解决方案如下:

  • 路径错误(最高发)
    你当前AJAX请求的url写的是绝对路径/Home/contact_user,会直接从域名根目录发起请求,如果你的项目部署在域名子目录下(比如项目访问地址是https://你的域名/站点目录/用户名的形式),就会出现路径不匹配的404。
    解决方法:将AJAX的请求地址替换为框架生成的动态地址,在视图文件的JS代码中修改url参数为:

    url: "<?= base_url('Home/contact_user') ?>",
    

    如果JS代码是独立的外部文件,先在视图公共部分定义全局基础路径:

    <script>
    window.baseUrl = "<?= base_url(); ?>";
    </script>
    

    再将AJAX的url改为:

    url: window.baseUrl + "Home/contact_user",
    

    如果你没有配置伪静态去掉index.php,还需要在路径前加上index.php:

    url: window.baseUrl + "index.php/Home/contact_user",
    
  • 路由匹配冲突
    你配置的$routes->get('/(:any)', 'Home::user/$1')会匹配所有GET请求,虽然你的提交是POST请求不会被该路由拦截,但如果开启了自动路由或者存在其他同路径的路由配置,会优先匹配到错误路由。
    解决方法:将contact_user的POST路由调整到路由配置的最顶部,确保优先匹配,同时关闭不必要的自动路由:

    // 放在路由最开头
    $routes->post('/Home/contact_user', 'Home::contact_user');
    $routes->get('/', 'Home::index');
    $routes->get('/(:any)', 'Home::user/$1');
    // 关闭自动路由(CI4版本适用)
    $routes->setAutoRoute(false);
    
  • 大小写/权限问题
    检查Home控制器的命名空间是否为namespace App\Controllers;,contact_user方法的访问权限必须为public,同时注意路径的大小写,框架对控制器、方法名的大小写是敏感的,要和路由配置里的拼写完全一致。

  • CSRF拦截(偶发)
    如果开启了框架的CSRF防护,请求没有携带CSRF令牌会被拦截,部分配置下会跳转到404页。解决方法是在AJAX请求的参数中加入CSRF令牌:

    var data = {
        '<?= csrf_token() ?>': '<?= csrf_hash() ?>',
        'user_id': $('#user_id').val(),
        // 其他原有参数保持不变
    };
    

内容的提问来源于stack exchange,提问作者Nxt Invent Solutions

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:45:00