jQuery可排序在一个数据库调用中序列化两列?

时间:2009-08-11 16:54:28

标签: jquery

嘿所有人。快速概述我正在努力实现的目标。我有两列数据。每列具有任意数量的均匀元素。在jQuery可排序更新事件上,我想序列化其可敬列中所有元素的位置。列中的每个元素都具有item_{id}形式的id。在update事件中,我将序列化两列中的元素。我想知道是否有一种有效的方法来序列化col1和col2列顺序并将它们组合成一个数据库调用。开箱即用,sortable(“serialize”)方法将返回一个格式化的字符串,如:

item[]=88&item[]=1&item[]=2&item[]=90

因此,在第1列的更新事件中,我有:

$("#col1").sortable({
    handle: '.item h2',
    connectWith: '#col2',
    update: function(event, ui) { Update(event, ui); }
}).disableSelection();

同样对于第2栏:

$("#col2").sortable({
    handle: '.item h2',
    connectWith: '#col1',
    update: function(event, ui) { Update(event, ui); }
}).disableSelection();

更新事件:

function Update(event, ui) {
    var col1Order = $("#col1").sortable("serialize");  // Returns item[]=88&item[]=1&item[]=2&item[]=90
    var col2Order = $("#col2").sortable("serialize");  // Returns item[]=23&item[]=10&item[]=65
}

是否有一种有效的方法将第1列排序和第2列排序组合到一个数据库调用中(它会将更新后的位置存储在数据库中)?

如果我将两个结果连接在一起,它将产生一个形式的字符串:

item[]=88&item[]=1&item[]=2&item[]=90&item[]=23&item[]=10&item[]=65

使用此表单,您无法区分哪个项来自哪个列。我考虑过不同的方法。一种方法是将查询字符串格式化为?col1=88_1_2_90&col2=23_10_65,然后在服务器端将{1}}上的col1值88_1_2_90分开,这将给出一组值(88)在位置0,1位在位置1,依此类推)并使用相同的方法拆分col2值,但我认为可能有更优雅的方法来实现这一点。

我的主要目标是避免进行两次单独的数据库调用(一次用于column1,另一次用于column2)。我可以序列化col1并调用数据库来更新col1中元素的位置,然后序列化col2并再次调用数据库来更新col2中元素的位置,但这就是我试图避免的。

我愿意接受任何建议。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用以下方法解决此问题:

jQuery('.column').sortable('serialize', {key: 'widgets[0][]'});

答案 1 :(得分:0)

使用嵌套数组怎么样?你应该得到这样的东西:

item[0][]=88&item[0][]=1&item[0][]=2&item[0][]=90&item[1][]=23&item[1][]=10&item[1][]=65

如果需要,您可以轻松地使用与数组相关的函数将其展平为一个数组。