jQuery:如何处理sortable(’serialize’)返回的列表?

使用jQuery我正在使用’serialize’检索可排序列表的位置,如下所示:

var order = $('ul').sortable('serialize');

变量’order’然后收到以下内容:

id[]=2&id[]=3&id[]=1&id[]=4&id[]=5

现在我如何在ajax调用中使用这些数据?

这就是我打算这样做的方式,但它很难看,我无法更改参数名称’id’:

$.post('ajax.php?'+order,{action:'updateOrder'});

也许我需要反序列化,然后内爆变量’order’并将其分配给一个参数?


我没有服务器端代码的问题,但我有一个jQuery客户端站点代码的问题。 问题是,我在哪里将’order’变量放在脚本中?

在我给出的示例中,我将其添加为查询字符串:

'ajax.php?'+order

但我想将它作为参数传递,就像action参数一样。 以下不起作用,它返回语法错误:

$.post('ajax.php?'+order,{action:'updateOrder',order});

找到了! 我需要添加选项key:'string' ,它将变量名称更改为’string’而不是’id’。

 var order = $('#projects ul').sortable('serialize',{key:'string'}); $.post('ajax.php',order+'&action=updateOrder'); 

我认为最好的方法是不使用sortable('serialize') ,而是使用jQuery简单地迭代排序的id,如下所示:

 order = []; $('ul').children('li').each(function(idx, elm) { order.push(elm.id.split('_')[1]) }); $.get('ajax.php', {action: 'updateOrder', 'order[]': order}); 

这有点优于将序列化的可排序显式附加到URL(或参数),因为如果列表中没有li ,它根本不包含order[]参数。 (当我遇到这个问题时,我使用了sortable(connectWith: 'ul')因此用户完全可以从一个列表中拖动所有li )。 相反,附加序列化的可排序将留下不需要的“&”。

让我们说你正在订购新闻,你的页面发送到“?id [] = 2&id [] = 3&id [] = 1&id [] = 4&id [] = 5”你的PHP代码。

 $_POST['id'] # would be [2,3,1,4,5] // Now we need to update the position field of these items foreach($_POST['id'] as $i=>$id ): // For our first record, $i is 0, and $id is 2. $post = Post::get($id); # Do you own database access here $post->position = $i; # Set the position to its location in the array $post->save(); # Save the record endforeach 
 var order = $('#projects ul').sortable('toArray'}); 

这可能也有效;)

最好的方法是使用var order = $('ul').sortable('serialize'); function显示在以下链接中:

http://blog.arnaud-k.fr/2010/09/29/tutorial-jquery-trier-une-liste-en-dragndrop-avec-jqueryui-sortable/

在php文件中获取有序列表数据所需的全部代码是:

 foreach( $_POST['id'] as $order => $order_nb ) { ... } 

关于“关键”参数,我使用方括号来获得数组。

 var data = $('#cms-form').serialize(); data += '&' + $('.ui-tabs-nav').sortable('serialize', {key:'nav_order[]'}); 

我通过操纵sortable(’serialize’)创建了自己的解决方案。 我通过使用jquery函数简化了它,然后将其发布到php url以更新数据库中列表的顺序。 看看我的代码。

 $( "#covercast_sortable" ).sortable({ update : function () { var order = $('#covercast_sortable').sortable('serialize',{key:'string'}); // order var gives something like string=3&string=2&string=1 var ar = order.split('&'); var i = 0; var str = ''; for(i;i 

你想在PHP中排序为数组
使用parse_str()
parse_str($data, $output);
print_r($output);

输出:数组([album] =>数组([0] => stat)

 [sort] => Array ( [0] => 157204 [1] => 157205 [2] => 157206 [3] => 157208 [4] => 157207 [5] => 157209 [6] => 157210 [7] => 157211 [8] => 157212 [9] => 157213 )