利用jQuery UI Sortable实现前端排序与后端PHP同步
本文介绍如何使用jQuery UI的Sortable插件实现前端列表项的拖拽排序,并通过JavaScript收集排序后的ID序列。随后,通过Ajax调用后端PHP函数,解析接收到的数据并更新数据库中的排序字段,从而完成从前端交互到后端数据持久化的完整流程。
HTML列表结构构建
首先,需要构建基础的HTML结构。使用无序列表ul配合class为list-group的容器,内部包含多个li元素作为列表项。每个li元素通过data-id属性存储对应的唯一标识符,例如category的id。同时,列表项中可能包含名称显示以及删除操作的链接,链接上绑定确认提示。若数据库中没有分类数据,则显示暂无设置的提示信息。
<span style="font-size:14px;"><ul class="list-group">
<? if ($categorys): ?>
<? foreach ($categorys as $category):?>
<li class="list-group-item" data-id="<? echo $category->id ?>">
<? echo $category->name?>
<a href="<? echo site_url('group/category/delete?id=' . $category->id) ?>" onclick="<?echo lang('confirm')?>">
<span class="glyphicon glyphicon-remove"></span></a>
</li>
<? endforeach;?>
<? else: ?>
<div class="alert alert-danger">暂时没有设置</div>
<? endif; ?>
</ul></span>
前端jQuery UI排序实现
在前端JavaScript部分,引入jquery和jqueryui模块。初始化Sortable组件绑定到.list-group元素上。配置stop事件回调函数,当拖拽停止时触发。在回调中,遍历所有class为list-group-item的li元素,提取每个元素的data-id属性值,并将这些ID拼接成一个以逗号分隔的字符串。
<span style="font-size:14px;"> <script>
require(["jquery","jqueryui"],function($) {
var d = window.top.dialog({
content: '配置已更新'
});
$(function() {
$( ".list-group").sortable({
stop: function( event, ui ) {
data = '';
$('li.list-group-item').each(function (){
data += ',' + $(this).attr('data-id');
});
$.post('/group/category/listorder',{data:data});
d.show();
setTimeout(function () {
d.close();
}, 1000);
}
}).disableSelection();
});
});
</script></span>
后端PHP数据处理逻辑
后端PHP代码定义了两个主要方法:listorder和delete。listorder方法接收前端提交的data参数,使用explode函数将其分割为数组。遍历该数组,对每个有效的ID调用category_model的save方法,传入当前索引$i作为listorder的值,随后递增$i。delete方法接收id参数,调用category_model的delete方法进行删除,并返回成功消息。
<span style="font-size:14px;">public function listorder() {
$data = explode(',', $this->input->post('data'));
$i = 1;
foreach ($data as $id) {
if (!$id)
continue;
$this->category_model->save($id, array(
'listorder' => $i,
));
$i++;
}
}
public function delete() {
$id = $this->input->get('id');
$this->category_model->delete($id);
messagebox(lang('success'), 'referer');
}</span>

上述内容详细阐述了如何通过前端拖拽交互获取排序结果,并将该结果通过Ajax传递给后端PHP接口进行数据库更新。这一流程实现了用户界面与后台数据状态的同步,确保了列表排序操作的完整性和准确性。
免登录快速分享代码:适合面试协作的轻量级JS在线运行工具推荐
2026-11-05 14:45:59
JS空字符串和纯空格转浮点数的结果是什么
2026-11-05 11:04:42
JS在线格式化缩进混乱怎么办?配置项调整技巧
2026-11-04 23:27:25
JS怎么获取秒级时间戳
2026-11-03 21:45:29
JS时间戳怎么从毫秒转换为秒
2026-11-03 20:04:14
