基于 CodeIgniter 和 AJAX 实现动态下拉菜单筛选表格数据

基于 CodeIgniter 和 AJAX 实现动态下拉菜单筛选表格数据

本教程详细介绍了如何在 CodeIgniter 框架中,利用 jQuery 和 AJAX 技术实现表格数据的实时过滤功能。通过监听下拉菜单的change事件,前端异步请求后端接口,后端根据筛选条件从数据库获取数据并返回 JSON,最终前端动态更新表格内容,无需页面刷新,从而提升用户体验。

1. 概述与核心原理

在传统的 web 应用中,当用户需要根据某个条件筛选数据时,通常会通过提交表单来刷新整个页面。然而,这种方式会导致用户体验不佳。通过引入 ajax(asynchronous javascript and xml)技术,我们可以在不刷新页面的情况下,与服务器进行数据交互,实现数据的实时更新。

本教程将结合 CodeIgniter 的 MVC 架构和 jQuery 库,实现以下流程:

前端 (View):用户在下拉菜单中选择一个选项。JavaScript (jQuery):捕获下拉菜单的change事件,获取选中的值,并构建一个 AJAX 请求发送给后端。后端路由 (Routes):将 AJAX 请求的 URL 映射到 CodeIgniter 控制器的一个特定方法。后端控制器 (Controller):接收前端发送的筛选参数,调用模型层方法查询数据库。后端模型 (Model):根据筛选参数执行数据库查询,并返回过滤后的数据。后端控制器 (Controller):将查询结果封装成 JSON 格式,发送回前端。前端 (JavaScript):接收到 JSON 数据后,解析数据并动态更新页面上的表格内容。

2. 前端视图 (View) 设计

首先,我们需要在视图文件中准备好表格结构和下拉菜单。为了方便 JavaScript 操作,请为下拉菜单和表格的

元素添加唯一的 id 属性。同时,引入 jQuery 库。

        动态数据筛选                    table {            width: 100%;            border-collapse: collapse;            margin-top: 20px;        }        th, td {            border: 1px solid #ddd;            padding: 8px;            text-align: left;        }        th {            background-color: #f2f2f2;        }        select {            padding: 5px;            margin-bottom: 10px;        }        

数据实时筛选示例

所有来源 <option value=""> <!-- 所有分类 ... -->
<!-- --> 0) { foreach ($records as $row) { ?> <!-- --> <?php } } else { echo ''; // 初始无数据时的提示 } ?>
来源 其他字段
source); ?>other_field); ?>
暂无数据
$(document).ready(function() { // 监听下拉菜单的 change 事件 $('#sourceFilter').on('change', function() { var selectedSource = $(this).val(); // 获取当前选中的值 // 如果有多个筛选条件,可以这样收集所有值 // var filters = { // source: $('#sourceFilter').val(), // category: $('#categoryFilter').val() // 假设有另一个ID为 categoryFilter 的下拉菜单 // }; // 发送 AJAX 请求 $.ajax({ url: '', // CodeIgniter 的 base_url 辅助函数 type: 'GET', data: { source: selectedSource // 将筛选值作为 GET 参数发送 // 如果有多个筛选条件,可以发送 filters 对象 // data: filters }, dataType: 'json', // 期望服务器返回 JSON 格式的数据 beforeSend: function() { // 请求发送前显示加载提示 $('#recordsTableBody').html('加载中...'); }, success: function(response) { // AJAX 请求成功后处理数据 var records = response; var html = ''; if (records && records.length > 0) { // 遍历数据并构建表格行 $.each(records, function(index, record) { html += ''; html += '' + htmlspecialchars(record.source) + ''; // 根据实际数据添加更多列 // html += '' + htmlspecialchars(record.other_field) + ''; html += ''; }); } else { html = '暂无数据'; } // 更新表格的 tbody 内容 $('#recordsTableBody').html(html); }, error: function(xhr, status, error) { // AJAX 请求失败时处理错误 console.error("AJAX Error: ", status, error); $('#recordsTableBody').html('数据加载失败,请重试。'); } }); }); // JavaScript 辅助函数,用于 HTML 转义,防止 XSS function htmlspecialchars(str) { if (typeof str !== 'string') { return str; // 如果不是字符串,直接返回 } var map = { "&": "&", "<": "": ">", """: """, "'": "'" }; return str.replace(/[&"']/g, function(m) { return map[m]; }); } });

关键点:

id=”sourceFilter”:用于 jQuery 选中下拉菜单。id=”recordsTableBody”:用于 jQuery 动态更新表格内容。base_url(‘ajax_dropdown’):确保 AJAX 请求的 URL 正确指向 CodeIgniter 的根路径。dataType: ‘json’:明确告知 jQuery 期望服务器返回 JSON 格式的数据。htmlspecialchars:在将数据插入 HTML 前进行转义,防止 XSS 攻击。多下拉菜单处理:如果存在多个筛选下拉菜单,可以在 data 对象中传递所有筛选器的值,并在后端同时处理。例如 data: { source: selectedSource, category: selectedCategory }。

3. 后端路由 (Routes) 配置

在 CodeIgniter 的 application/config/routes.php 文件中,添加一条路由规则,将前端 AJAX 请求的 URL 映射到控制器的方法。

<?phpdefined('BASEPATH') OR exit('No direct script access allowed');/*| -------------------------------------------------------------------------| URI ROUTING| -------------------------------------------------------------------------| This file lets you re-map URI requests to specific controller functions.|*/// ... 其他路由规则 ...// 为 AJAX 请求定义路由$route['ajax_dropdown'] = 'your_controller/ajax_dropdown';

说明:

ajax_dropdown 是前端 AJAX 请求的 URL 片段。your_controller/ajax_dropdown 指向 application/controllers/Your_controller.php 文件中的 ajax_dropdown 方法。请根据你的实际控制器名称进行替换。

4. 后端控制器 (Controller) 逻辑

创建一个控制器文件(例如 application/controllers/Your_controller.php),并在其中实现 ajax_dropdown 方法,用于接收前端请求、调用模型、并返回 JSON 数据。

load->model('your_model'); // 替换为你的模型名称    }    // 默认方法,用于加载初始视图和数据    public function index() {        // 假设这里获取初始的下拉菜单数据和表格数据        $data['sources'] = $this->your_model->get_all_sources();        $data['records'] = $this->your_model->get_all_records(); // 获取所有记录或默认记录        $this->load->view('your_view', $data); // 替换为你的视图文件    }    // 处理 AJAX 请求的方法    public function ajax_dropdown() {        // 确保请求是 AJAX 请求 (可选,但推荐)        if (!$this->input->is_ajax_request()) {            show_404(); // 如果不是 AJAX 请求,返回 404        }        // 获取前端发送的筛选参数        // $this->input->get() 方法用于获取 GET 请求参数        // TRUE 参数用于开启 XSS 过滤,提高安全性        $source_filter = $this->input->get('source', TRUE);        // 如果有多个筛选条件,可以这样获取        // $category_filter = $this->input->get('category', TRUE);        // $filters = ['source' => $source_filter, 'category' => $category_filter];        // 调用模型方法,根据筛选条件获取数据        $filtered_data = $this->your_model->get_filtered_records($source_filter); // 将筛选参数传递给模型        // 设置响应头为 JSON 格式        $this->output             ->set_content_type('application/json')             ->set_output(json_encode($filtered_data)); // 将数据编码为 JSON 并输出    }}

关键点:

$this->load->model(‘your_model’):载入你的数据模型,以便进行数据库操作。$this->input->get(‘source’, TRUE):安全地获取名为 source 的 GET 参数。$this->output->set_content_type(‘application/json’)->set_output(json_encode($filtered_data)):这是 CodeIgniter 推荐的返回 JSON 数据的方式,它会自动设置正确的 HTTP Content-Type 头。

5. 后端模型 (Model) 逻辑

创建一个模型文件(例如 application/models/Your_model.php),用于封装所有的数据库操作。

load->database(); // 载入数据库库    }    /**     * 获取所有用于下拉菜单的来源数据     * @return array     */    public function get_all_sources() {        // 假设你的数据表中有一个 'title' 字段表示来源名称        $this->db->select('DISTINCT(title) as title');        $this->db->from('your_table_name'); // 替换为你的数据表名        $query = $this->db->get();        return $query->result_array(); // 返回数组,方便在视图中 foreach    }    /**     * 获取所有记录 (用于初始加载)     * @return array     */    public function get_all_records() {        $query = $this->db->get('your_table_name'); // 替换为你的数据表名        return $query->result(); // 返回对象数组    }    /**     * 根据筛选条件获取记录     * @param string|null $source_filter 来源筛选值     * @return array     */    public function get_filtered_records($source_filter = null) {        $this->db->select('source'); // 选择你需要展示的字段        // 如果有其他字段,可以添加:$this->db->select('

以上就是基于 CodeIgniter 和 AJAX 实现动态下拉菜单筛选表格数据的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1272229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月10日 14:35:16
下一篇 2025年12月10日 14:35:54

相关推荐

  • 使用 element-ui Table 组件合并单元格时,最后一行高度异常该如何解决?

    element-ui table 组件合并单元格导致最后一行高度异常的解决之道 在 element-ui 的表格组件中,利用 objectspanmethod 用于合并单元格。但是,在合并过程中,用户遇到了最后一行高度异常的问题,导致其高度远高于其他行。 问题分析 根据用户提供的代码示例,在合并第 …

    2025年12月24日
    000
  • Element-UI Table 合并单元格导致最后一行高度异常如何解决?

    element-ui table 合并单元格导致最后一行高度异常的解决方法 使用 element-ui 的 table 组件时,对某些列进行合并单元格可能会在最后一行引起异常高度问题。例如,在合并最后一列的情况下,最后一行的文本可能会超出边界。 出现这种情况的原因是: 在对合并行进行样式设置时,使用…

    2025年12月24日
    200
  • Element UI 表格合并单元格最后一行高度异常如何解决?

    element ui 表格合并单元格最后一行高度异常问题 element ui 表格使用 rowspan 属性合并单元格时,最后一行的高度可能出现比其他行高的异常情况。 原因: element ui 表格合并单元格时,需要通过 objectspanmethod 方法指定合并单元格的起始行和结束行,而…

    2025年12月24日
    000
  • Element-UI Table 合并单元格时,最后一行高度异常的原因是什么?

    element-ui table 合并单元格时最后一行高度异常 在使用 element-ui 中的 table 组件时,若对最后一列进行合并单元格操作,可能会遇到最后一行高度异常的情况,表现为高度比其他行高出许多。 出现此异常的原因在于合并单元格的代码配置中起始行数写错。具体来说,在使用 objec…

    2025年12月24日
    000
  • 使用 React 构建 Fylo 云存储网站

    介绍 在这篇博文中,我们将逐步介绍如何使用 react 创建一个功能丰富的云存储网站。该网站受 fylo 启发,提供了主页、功能、工作原理、感言和页脚等部分。在此过程中,我们将讨论用于构建这个完全响应式网站的结构、组件和样式。 项目概况 该项目由多个部分组成,旨在展示云存储服务。每个部分都是用 re…

    2025年12月24日 好文分享
    000
  • 使用 React 构建食谱查找器网站

    介绍 在本博客中,我们将使用 react 构建一个食谱查找网站。该应用程序允许用户搜索他们最喜欢的食谱,查看趋势或新食谱,并保存他们最喜欢的食谱。我们将利用 edamam api 获取实时食谱数据并将其动态显示在网站上。 项目概况 食谱查找器允许用户: 按名称搜索食谱。查看趋势和新添加的食谱。查看各…

    2025年12月24日 好文分享
    200
  • ⏰ 你的声音很重要 – CSS 调查现已开放!

    嘿? 本周五,Sprintfolio 将举办Designer + Dev Mixer。我正计划参加并且对此感到非常兴奋! 这将是与设计师和开发人员建立联系、交流见解并促进集体成长的绝佳机会。 我强烈推荐加入 – 完全免费!谁有兴趣? – 注册 享受 ? – Ada…

    2025年12月24日
    000
  • 不可变数据结构:ECMA 4 中的记录和元组

    不可变数据结构:ecmascript 2024 中的新功能 ecmascript 2024 引入了几个令人兴奋的更新,但对我来说最突出的一个功能是引入了不可变数据结构。这些新结构——记录和元组——改变了 javascript 中数据管理的游戏规则。它们提供了一种令人满意的方式来保持我们的数据健全、安…

    2025年12月24日
    100
  • 为什么前端固定定位会发生移动问题?

    前端固定定位为什么会出现移动现象? 在进行前端开发时,我们经常会使用CSS中的position属性来控制元素的定位。其中,固定定位(position: fixed)是一种常用的定位方式,它可以让元素相对于浏览器窗口进行定位,保持在页面的固定位置不动。 然而,有时候我们会遇到一个问题:在使用固定定位时…

    2025年12月24日
    000
  • 学会从头开始学习CSS,掌握制作基本网页框架的技巧

    从零开始学习CSS,掌握网页基本框架制作技巧 前言: 在现今互联网时代,网页设计和开发是一个非常重要的技能。而学习CSS(层叠样式表)是掌握网页设计的关键之一。CSS不仅可以为网页添加样式和布局,还可以为用户呈现独特且具有吸引力的页面效果。在本文中,我将为您介绍一些基本的CSS知识,以及一些常用的代…

    2025年12月24日
    200
  • 探究CSS引入第三方框架的作用及价值

    CSS引入第三方框架的作用和意义,需要具体代码示例 随着前端技术的迅猛发展,越来越多的前端工程师开始采用第三方框架来简化开发流程并提高工作效率。在CSS的世界里,也有许多优秀的第三方框架可供选择,如Bootstrap、Foundation等。本文将重点讨论CSS引入第三方框架的作用和意义,并通过具体…

    2025年12月24日
    000
  • 从初学到专业:掌握这五种前端CSS框架

    CSS是网站设计中重要的一部分,它控制着网站的外观和布局。前端开发人员为了让页面更加美观和易于使用,通常使用CSS框架。这篇文章将带领您了解这五种前端CSS框架,从入门到精通。 Bootstrap Bootstrap是最受欢迎的CSS框架之一。它由Twitter公司开发,具有可定制的响应式网格系统、…

    2025年12月24日
    200
  • 揭秘Web标准涵盖的语言:了解网页开发必备的语言范围

    在当今数字时代,互联网成为了人们生活中不可或缺的一部分。作为互联网的基本构成单位,网页承载着我们获取和分享信息的重要任务。而网页开发作为一门独特的技术,离不开一些必备的语言。本文将揭秘Web标准涵盖的语言,让我们一起了解网页开发所需的语言范围。 首先,HTML(HyperText Markup La…

    2025年12月24日
    000
  • 克服害怕做选择的恐惧症:这五个前端CSS框架将为你解决问题

    选择恐惧症?这五个前端CSS框架能帮你解决问题 近年来,前端开发者已经进入了一个黄金时代。随着互联网的快速发展,人们对于网页设计和用户体验的要求也越来越高。然而,要想快速高效地构建出漂亮的网页并不容易,特别是对于那些可能对CSS编码感到畏惧的人来说。所幸的是,前端开发者们早已为我们准备好了一些CSS…

    2025年12月24日
    200
  • 揭开Web开发的语言之谜:了解构建网页所需的语言有哪些?

    Web标准中的语言大揭秘:掌握网页开发所需的语言有哪些? 随着互联网的快速发展,网页开发已经成为人们重要的职业之一。而要成为一名优秀的网页开发者,掌握网页开发所需的语言是必不可少的。本文将为大家揭示Web标准中的语言大揭秘,介绍网页开发所需的主要语言。 HTML(超文本标记语言)HTML是网页开发的…

    2025年12月24日
    400
  • 常用的网页开发语言:了解Web标准的要点

    了解Web标准的语言要点:常见的哪些语言应用在网页开发中? 随着互联网的不断发展,网页已经成为人们获取信息和交流的重要途径。而要实现一个高质量、易用的网页,离不开一种被广泛接受的Web标准。Web标准的制定和应用,涉及到多种语言和技术,本文将介绍常见的几种语言在网页开发中的应用。 首先,HTML(H…

    2025年12月24日
    000
  • 网页开发中常见的Web标准语言有哪些?

    探索Web标准语言的世界:网页开发中常用的语言有哪些? 在现代社会中,互联网的普及程度越来越高,网页已成为人们获取资讯、娱乐、交流的重要途径。而网页的开发离不开各种编程语言的应用和支持。在这个虚拟世界的网络,有许多被广泛应用的标准化语言,用于为用户提供优质的网页体验。本文将探索网页开发中常用的语言,…

    2025年12月24日
    000
  • 深入探究Web标准语言的范围,涵盖了哪些语言?

    Web标准是指互联网上的各个网页所需遵循的一系列规范,确保网页在不同的浏览器和设备上能够正确地显示和运行。这些标准包括HTML、CSS和JavaScript等语言。本文将深入解析Web标准涵盖的语言范围。 首先,HTML(HyperText Markup Language)是构建网页的基础语言。它使…

    2025年12月24日
    000
  • 深入理解CSS框架与JS之间的关系

    深入理解CSS框架与JS之间的关系 在现代web开发中,CSS框架和JavaScript (JS) 是两个常用的工具。CSS框架通过提供一系列样式和布局选项,可以帮助我们快速构建美观的网页。而JS则提供了一套功能强大的脚本语言,可以为网页添加交互和动态效果。本文将深入探讨CSS框架和JS之间的关系,…

    2025年12月24日
    000
  • 项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结

    项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结 随着互联网的快速发展,网页设计已经成为了各行各业都离不开的一项技能。优秀的网页设计可以给用户留下深刻的印象,提升用户体验,增加用户的黏性和转化率。而要做出优秀的网页设计,除了对美学的理解和创意的运用外,还需要掌握一些基本的技能,如…

    2025年12月24日
    200

发表回复

登录后才能评论
关注微信