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

如何通过单个PHP文件调用多函数为jQuery EasyUI DataGrid加载数据?

用单一PHP文件为多个jQuery EasyUI DataGrid提供数据方案

当然可以!这其实是后端接口开发里非常实用的优化思路——用一个入口文件处理多个数据请求,避免为每个DataGrid都新建独立PHP文件的冗余问题。下面给你一套清晰可落地的实现方案:

核心思路

通过在请求中传递一个标识参数(比如action),让items.php根据这个参数判断需要调用哪个数据处理逻辑,最终返回对应格式的JSON数据给EasyUI DataGrid。

1. 编写统一入口文件 items.php

这个文件会包含多个数据处理函数,并根据前端请求的action参数分发执行:

<?php
// 设置响应头,确保返回JSON格式,支持跨域(如果需要的话)
header("Content-Type: application/json; charset=utf-8");
header("Access-Control-Allow-Origin: *"); // 仅开发环境使用,生产环境请指定具体域名

// 引入数据库连接文件(如果需要操作数据库的话)
// require_once 'db_connection.php';

// --------------------------
// 数据处理函数:用户列表
// --------------------------
function getUserList() {
    // 这里可以替换为实际的数据库查询逻辑
    // EasyUI DataGrid会自动传递page、rows、sort、order等参数,用于分页排序
    $page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
    $rows = isset($_GET['rows']) ? (int)$_GET['rows'] : 10;
    
    // 模拟数据库查询结果
    $total = 50; // 总记录数
    $data = [];
    for ($i = ($page-1)*$rows; $i < min($page*$rows, $total); $i++) {
        $data[] = [
            'id' => $i+1,
            'username' => 'user_'.($i+1),
            'email' => 'user_'.($i+1).'@example.com',
            'create_time' => date('Y-m-d H:i:s', time() - rand(86400, 3600*24*30))
        ];
    }
    
    // 返回EasyUI要求的JSON格式:total(总条数) + rows(当前页数据)
    return json_encode([
        'total' => $total,
        'rows' => $data
    ]);
}

// --------------------------
// 数据处理函数:商品列表
// --------------------------
function getProductList() {
    $page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
    $rows = isset($_GET['rows']) ? (int)$_GET['rows'] : 10;
    
    $total = 80;
    $data = [];
    for ($i = ($page-1)*$rows; $i < min($page*$rows, $total); $i++) {
        $data[] = [
            'product_id' => $i+1,
            'product_name' => '商品_'.($i+1),
            'price' => rand(10, 1000)/10,
            'stock' => rand(0, 1000)
        ];
    }
    
    return json_encode([
        'total' => $total,
        'rows' => $data
    ]);
}

// --------------------------
// 请求分发逻辑
// --------------------------
$action = isset($_GET['action']) ? $_GET['action'] : '';

// 允许的操作列表,防止恶意请求
$allowedActions = ['getUserList', 'getProductList'];

if (in_array($action, $allowedActions) && function_exists($action)) {
    echo $action();
} else {
    // 返回错误响应
    echo json_encode([
        'success' => false,
        'msg' => '无效的请求操作'
    ]);
}
?>

2. 前端EasyUI DataGrid调用示例

在你的HTML页面中,不同的DataGrid只需在请求URL中传递不同的action参数即可:

<!-- 用户列表DataGrid -->
<table id="userGrid" class="easyui-datagrid" style="width:700px;height:350px"
        url="items.php?action=getUserList"
        title="用户列表"
        pagination="true"
        rownumbers="true"
        fitColumns="true"
        singleSelect="true">
    <thead>
        <tr>
            <th field="id" width="50">ID</th>
            <th field="username" width="100">用户名</th>
            <th field="email" width="150">邮箱</th>
            <th field="create_time" width="120">创建时间</th>
        </tr>
    </thead>
</table>

<!-- 商品列表DataGrid -->
<table id="productGrid" class="easyui-datagrid" style="width:700px;height:350px"
        url="items.php?action=getProductList"
        title="商品列表"
        pagination="true"
        rownumbers="true"
        fitColumns="true"
        singleSelect="true">
    <thead>
        <tr>
            <th field="product_id" width="50">商品ID</th>
            <th field="product_name" width="150">商品名称</th>
            <th field="price" width="80" align="right">价格</th>
            <th field="stock" width="80" align="center">库存</th>
        </tr>
    </thead>
</table>

3. 额外优化建议

  • 参数校验:除了校验action,还要对分页参数(page、rows)、排序参数(sort、order)做合法性校验,防止SQL注入或非法请求。
  • 数据库复用:把数据库连接逻辑抽成独立文件(比如db_connection.php),在items.php中引入,避免重复代码。
  • 权限控制:如果不同数据需要不同的访问权限,可以在对应处理函数开头添加权限校验逻辑。
  • 错误捕获:在数据库查询等可能出错的逻辑中添加try-catch,返回友好的错误信息给前端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:17:09