我的网站中有一个可排序的列表,它将带有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);
}
我一直在努力研究如何将数据从sortable中提取到jquery中的多维数组中,但目前我正在绘制一个空白。
答案 0 :(得分:1)
好的,我明白了。对于用户手动拖放超过1000个项目的列表中的项目,似乎有点笨拙。但我不知道你是如何/为什么这样做所以假设它适用于你的应用程序。
以下解决方案实际上来自此问题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
}
?>