CodeIgniter框架中视图层按钮值无法传递到控制器层问题求助
问题排查与解决方案
核心问题
你当前的代码只在前端获取了按钮的value值,没有发起请求将值传递到后端控制器,所以控制器无法接收到posting_user_id参数。
具体修复步骤
1. 修改前端JS,增加AJAX请求传值
将原有的点击事件代码修改为如下内容,把获取到的用户id通过POST请求传到控制器:
$(document).ready(function () { $('.mid').click(function(){ var id = $(this).val(); // 推荐用val()代替attr('value')读取表单元素值 // 先确认id正常获取 if(!id){ alert("用户ID获取异常"); return false; } // 发起AJAX请求到后端控制器,此处url替换为你实际的控制器方法地址 $.post("你的控制器方法路由地址", { posting_user_id: id, // 如果开启了CI的CSRF保护,需要加下面这行,csrf_test_name替换为你实际配置的csrf token名称 // [csrf_test_name]: $('input[name="csrf_test_name"]').val() }, function(res){ // 后端返回数据后的逻辑,这里假设你要把返回的详情插入到.show_posting容器 if(res){ $(".show_posting").html(res).show(); }else{ alert("no info"); } } ); }); });
2. 调整控制器代码,兼容传参和返回逻辑
如果是异步请求,控制器可以直接返回渲染好的详情片段或者JSON数据,同时增加参数非空校验避免查询异常:
public function 你的方法名(){ $posting_user_id = $this->input->post('posting_user_id'); // 校验参数非空 if(empty($posting_user_id)){ echo ''; exit; } $data['posting'] = $this->posting_models->get_manage_hospital_list($posting_user_id); // 如果是返回详情片段,加载对应的局部视图即可,不需要加载完整页面 echo $this->load->view('posting_detail_part', $data, true); exit; }
3. 可选:表单提交方案(页面刷新场景)
如果不需要异步无刷新加载,也可以用表单提交的方式实现:
<div class="marketer"> <form method="post" action="你的控制器路由地址"> <?php foreach($marketer_list as $marketer){ ?> <button type="submit" class="mid" name="posting_user_id" value="<?=$marketer->id?>"><?=$marketer->username?></button> <?php }?> </form> </div>
验证排查点
- 先确认按钮渲染的value值正常,点击按钮时弹出的id值正确
- 打开浏览器开发者工具的「网络」面板,确认请求中携带了
posting_user_id参数 - 控制器中临时打印
var_dump($this->input->post()),确认可以正常接收到参数 - 若开启了CodeIgniter的CSRF保护,必须在AJAX请求或表单中携带CSRF Token,否则请求会被拦截
内容的提问来源于stack exchange,提问作者user16989460
相关产品推荐
相关产品推荐

