使用可排序的 Jquery 在 Mysql DB 中存储 li 订单
Posted
技术标签:
【中文标题】使用可排序的 Jquery 在 Mysql DB 中存储 li 订单【英文标题】:Store li order in Mysql DB with Jquery sortable 【发布时间】:2013-12-15 22:27:58 【问题描述】:我的站点中有一个可排序的列表,它使用 ajax 请求将列表项的顺序保存到 php 页面。 问题是当 LI(由数据库生成)的 id 超过 999 左右时,由于我发送到 PHP 页面的数组变得太长,它开始出错。
有更好的方法吗?
目前我的 Jquery/ajax 是:
$(function()
$('#sortable').sortable(
update: function(event, ui)
var order = [];
$('#sortable li').each( function(e)
order[ $(this).attr('id') ] = $(this).index() + 1;
);
var request = $.ajax(
url: "ajax/save_order.php",
type: "POST",
data: positions : order,
dataType: "json"
);
);
);
我的 PHP 页面是:
$positions = $_POST['positions'];
foreach ($positions as $id_section => $order)
$sql = sprintf("
UPDATE section_order
SET id_order = %d
WHERE id_section = %d
",
$order,
$id_section
);
$result = mysql_query($sql);
我一直在尝试如何将数据从可排序的数据中获取到 jquery 中的多维数组中,但目前正在绘制空白。
【问题讨论】:
我对此感到困惑..“超过 999 左右开始出错”是什么错误? 您可以将数据作为 CSV 列表发送,我假设您的ids
都是数字,因此它们应该按照放置顺序保存在数组中。这可能会减少发送到服务器的数据量,但您必须为此调整您的 php
@superphonic 没有错误,但控制台似乎表明计算数组中的所有行需要很长时间才能超时。
在下面查看我的答案...
【参考方案1】:
好的,我明白了。对于用户来说,在 1000 多个项目的列表中手动拖放项目似乎有点笨拙。但我不知道您如何/为什么这样做,因此假设它适用于您的应用程序。
以下解决方案实际上来自这个SO问题jQuery UI Sortable, then write order into a database
jQuery Sortable 有一个序列化函数,可以为你获取订单。像下面这样使用它:
$('#sortable').sortable(
axis: 'y',
stop: function (event, ui)
var data = $(this).sortable('serialize');
// POST to server using $.post or $.ajax
$.ajax(
data: data,
type: 'POST',
url: 'save_order.php'
);
);
在save_order.php
文件中,只需检查发布的数据是什么样子并循环通过它,应该能够执行以下操作:
<?php
foreach ($_POST['each_item_whatever...'] as $value)
// Database stuff
?>
【讨论】:
以上是关于使用可排序的 Jquery 在 Mysql DB 中存储 li 订单的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery .ajax 从 mySQL DB 中检索记录
如何使用 Jquery EasyUI 将文件上传到 DB mysql?