在CodeIgniter中用jQuery/AJAX局部刷新订单表格的路径疑问
解决CodeIgniter中订单表格局部刷新的问题
我明白你的困惑——你现在的问题核心是load('path')里的路径不对,导致加载了整个页面(包括头部),所以才会重复显示头部。下面给你一步步讲清楚怎么解决:
1. 为什么会重复显示头部?
你之前填的path如果是当前页面的完整URL(比如直接写/order这样的),jQuery的load()会把整个页面的HTML(包括页面头部、导航、页脚这些)都塞进目标div里,自然就会重复显示头部了。我们需要的是只加载订单表格的HTML内容,而不是整个页面。
2. 第一步:在CodeIgniter控制器里新增一个专门返回表格的方法
假设你的订单页面控制器是Order.php,原来的方法(比如index())是加载完整页面(包含header、表格、footer)。现在你要加一个新方法,只输出表格的HTML,不加载任何模板头部和尾部:
class Order extends CI_Controller { // 原来的完整页面方法 public function index() { $data['orders'] = $this->order_model->get_all_orders(); // 从模型拿订单数据 $this->load->view('header'); // 加载头部视图 $this->load->view('order_table', $data); // 单独的表格视图 $this->load->view('footer'); // 加载页脚视图 } // 新增:专门返回订单表格的方法 public function refresh_order_table() { // 禁止浏览器缓存,确保每次都拿最新数据 $this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate'); $this->output->set_header('Pragma: no-cache'); $data['orders'] = $this->order_model->get_all_orders(); // 重新获取最新订单数据 $this->load->view('order_table', $data); // 只加载表格视图,不加载header/footer } }
3. 第二步:调整前端的jQuery代码
把load()里的path改成这个新方法的URL。在CodeIgniter里最好用site_url()来生成正确的URL,避免硬编码出错:
<script> $(document).ready(function(){ refreshTable(); }); function refreshTable(){ // 这里的路径就是控制器方法的URL $('#the_div_you_need_to_refresh').load('<?php echo site_url("order/refresh_order_table"); ?>', function(){ setTimeout(refreshTable, 5000); // 5秒后再次刷新 }); } </script>
4. 第三步:确保你的表格视图是独立的
你需要把订单表格的HTML单独放在一个视图文件里(比如order_table.php),结构大概是这样:
<div id="the_div_you_need_to_refresh"> <table class="order-table"> <thead> <tr> <th>订单ID</th> <th>客户名称</th> <th>订单金额</th> <th>订单状态</th> </tr> </thead> <tbody> <?php foreach($orders as $order): ?> <tr> <td><?php echo $order->id; ?></td> <td><?php echo $order->customer_name; ?></td> <td><?php echo $order->amount; ?></td> <td><?php echo $order->status; ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div>
这样每次load()请求都会拿到最新的表格HTML,替换掉原来的div内容,就不会出现头部重复的问题了。
内容的提问来源于stack exchange,提问作者Ioan Andrei
相关产品推荐
相关产品推荐

