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

Ajax请求参数未传递至控制器问题求助

解决Ajax参数无法传递到控制器的问题

看起来你遇到的问题主要出在URL的写法和参数传递的格式上,咱们一步步来修正:

1. 修正URL的写法

你把PHP的echo base_url()直接写在了JS字符串里,浏览器的JS引擎根本识别不了PHP代码,这会导致请求的URL完全错误。如果这段JS是写在PHP视图文件里,应该这样输出正确的接口地址:

url: "<?php echo base_url('design/get_sub_category'); ?>",

如果是单独的JS文件,建议先在PHP视图里定义全局变量存base_url:

<script>
var baseUrl = "<?php echo base_url(); ?>";
</script>

然后在JS文件里拼接URL:

url: baseUrl + "design/get_sub_category",

2. 调整参数传递的方式

你直接用JSON.stringify(id)传递单个值,这种情况下控制器需要读取原始请求体才能拿到数据,而大多数PHP框架(比如CodeIgniter)默认是解析表单格式的参数,所以更稳妥的是用下面两种方案:

方案一:表单格式传递(推荐,适配常规控制器接收逻辑)

去掉contentType: "application/json; charset=utf-8",把id包装成键值对传递:

$.ajax({
    url: "<?php echo base_url('design/get_sub_category'); ?>",
    type: "POST", // 或者GET,根据你的控制器方法定义调整
    data: { category_id: id }, // 用键名包装id,方便控制器通过参数名直接获取
    dataType: "json",
    success: function (data) {
        console.log(data);
    },
    error: function(xhr, status, error) {
        // 加上错误回调,方便排查请求失败的原因
        console.log("请求出错:", error);
        console.log("控制器响应:", xhr.responseText);
    }
});

对应的CodeIgniter控制器里,就可以直接用$this->input->post('category_id')(POST请求)或者$this->input->get('category_id')(GET请求)拿到id值。

方案二:保持JSON格式传递(需控制器处理原始请求体)

如果你一定要用JSON格式传递,那控制器需要手动读取请求的原始内容:

$.ajax({
    url: "<?php echo base_url('design/get_sub_category'); ?>",
    type: "POST",
    data: JSON.stringify({ category_id: id }), // 即使单个值也包装成对象,方便解析
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (data) {
        console.log(data);
    },
    error: function(xhr, status, error) {
        console.log("请求出错:", error);
        console.log("控制器响应:", xhr.responseText);
    }
});

对应的控制器方法要这样获取参数:

public function get_sub_category() {
    $rawJson = file_get_contents('php://input');
    $requestData = json_decode($rawJson, true);
    $categoryId = $requestData['category_id'];
    // 后续业务逻辑...
}

3. 额外调试建议

打开浏览器开发者工具(F12)切换到Network标签,查看这个Ajax请求的详情:

  • 检查Request URL是否正确
  • 查看Request Payload/Form Data里有没有你要传递的id值
  • 查看Response内容,确认控制器有没有返回报错信息

这样调整后,参数应该就能正常传递到控制器了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:55:42