CodeIgniter中如何将数据传递至下一页?现有编辑代码遇问题
在CodeIgniter中传递数据到编辑页面的解决方案
看你的代码,核心问题出在AJAX请求后的跳转逻辑上:你用POST传递了ID,但直接跳转页面时,POST的参数不会跟着带到新页面,而且$(location).attr('href', ...).html(data)的写法也不对——设置href后页面会立即刷新跳转,html(data)根本没有执行的机会。
下面给你几种实用的解决方案,帮你搞定这个问题:
方案1:直接通过URL传递ID(最常用也最简单)
不需要用AJAX,点击按钮时直接跳转到带ID的编辑页面URL就可以。把你的JS代码改成这样:
$(".content-wrapper").on("click", ".modalButton", function(e) { e.preventDefault(); // 获取当前行的ID const stockId = $(this).attr("data-src"); // 跳转到带ID的编辑页面 window.location.href = "<?php echo base_url('stock_details/edit/'); ?>" + stockId; });
然后在CodeIgniter的Stock_details控制器里,这样接收ID并获取数据:
public function edit($id = null) { // 检查ID是否有效 if (!$id) { // 没有ID的话跳回列表页 redirect('stock_details'); } // 从模型获取对应ID的库存数据 $data['stock_data'] = $this->stock_model->get_stock_details($id); // 加载编辑视图并传递数据 $this->load->view('stock_edit_view', $data); }
这样在编辑视图里,你就能直接用$stock_data调用要编辑的内容了。
方案2:AJAX验证ID有效性后再跳转(如果需要前置验证)
如果你必须先确认ID有效再跳转,可以这样修改代码:
$(".content-wrapper").on("click", ".modalButton", function(e) { e.preventDefault(); const stockId = $(this).attr("data-src"); $.ajax({ url: "<?php echo base_url('stock_details/check_valid_id'); ?>", method: "post", data: { id: stockId }, dataType: "json" }).done(function(response) { if (response.is_valid) { // 验证通过,跳转到带ID的编辑页面 window.location.href = "<?php echo base_url('stock_details/edit/'); ?>" + stockId; } else { alert("无效的库存ID,请检查!"); } }).fail(function() { alert("请求出错,请稍后重试!"); }); });
然后在控制器里加一个验证ID的方法:
public function check_valid_id() { $id = $this->input->post('id'); $is_valid = $this->stock_model->is_stock_exists($id); echo json_encode([ 'is_valid' => $is_valid ]); }
原代码的核心问题总结
- AJAX POST传递的ID,在页面跳转时不会被携带(因为跳转是GET请求),所以编辑页面拿不到参数。
$(location).attr('href', ...).html(data)是错误写法:设置href后浏览器会立即跳转,后续的html(data)完全不会执行,而且跳转后的页面是服务器返回的全新页面,不是当前页面替换内容。
内容的提问来源于stack exchange,提问作者Eswaramoorthy Karthikeyan
相关产品推荐
相关产品推荐

