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显示在以下链接中:
在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
干杯
如果数据是
$data = 'album[]=stat&sort[]=157204&sort[]=157205&sort[]=157206&sort[]=157208&sort[]=157207&sort[]=157209&sort[]=157210&sort[]=157211&sort[]=157212&sort[]=157213';
你想在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 )
)