在 jQuery EasyUI DataGrid 中,默认列不支持排序,需手动启用 sortable 属性。点击列头后,组件会自动向服务器发送排序字段与方向参数。掌握前后端参数对接逻辑,即可实现高效的数据排序交互。
启用列排序功能
jQuery EasyUI DataGrid 的所有列默认不可排序。若需支持点击列头进行排序,必须在列定义中显式设置 sortable="true" 属性。以下示例展示了如何为部分列启用排序:
Item ID
Product ID
List Price
Unit Cost
Attribute
Status
在该配置中,itemid、productid、listprice 和 unitcost 列支持排序,而 attr1 与 status 未设置 sortable 属性,因此点击其列头不会触发排序请求。

前端传递的排序参数
当用户点击可排序列的表头时,DataGrid 会自动向配置的 url 发起请求,并携带以下两个参数:
sort:当前排序的列字段名(如itemid)。order:排序方向,取值为asc(升序)或desc(降序),默认值为asc。
这些参数由 EasyUI 框架自动附加到请求中,开发者无需手动拼接。后端只需按约定接收并处理即可。
后端 PHP 排序处理逻辑
服务器端需接收 sort 与 order 参数,并将其安全地拼接到 SQL 查询语句中。以下为原始示例中的 PHP 处理逻辑:
$page = isset($_POST['page']) ? intval($_POST['page']) : 1;
$rows = isset($_POST['rows']) ? intval($_POST['rows']) : 10;
$sort = isset($_POST['sort']) ? strval($_POST['sort']) : 'itemid';
$order = isset($_POST['order']) ? strval($_POST['order']) : 'asc';
$offset = ($page-1)*$rows;
$result = array();
include 'conn.php';
$rs = mysql_query("select count(*) from item");
$row = mysql_fetch_row($rs);
$result["total"] = $row[0];
$rs = mysql_query("select * from item order by $sort $order limit $offset,$rows");
$items = array();
while($row = mysql_fetch_object($rs)){
array_push($items, $row);
}
$result["rows"] = $items;
echo json_encode($result);该脚本首先获取分页参数 page 与 rows,计算偏移量 offset。随后查询总记录数并赋值给 total,再根据排序字段与方向执行数据查询,最终将结果封装为 JSON 格式返回给前端。
安全注意事项与最佳实践
原始示例使用了已废弃的 mysql_* 函数,该扩展在 PHP 5.5.0 起被标记为废弃,并在 PHP 7.0.0 中彻底移除。实际项目中应改用 PDO 或 MySQLi,并结合预处理语句防止 SQL 注入。
此外,$sort 与 $order 直接拼接到 SQL 语句中存在安全风险。建议在后端对字段名进行白名单校验,仅允许预定义的列参与排序,并对 order 值限制为 asc 或 desc。示例改进逻辑如下:
$allowedSort = ['itemid', 'productid', 'listprice', 'unitcost'];
$sort = in_array($_POST['sort'], $allowedSort) ? $_POST['sort'] : 'itemid';
$order = ($_POST['order'] === 'desc') ? 'desc' : 'asc';通过上述校验,可有效避免恶意输入导致的查询异常或数据泄露。结合现代数据库扩展与参数校验,DataGrid 排序功能即可在生产环境中稳定运行。
