使用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});
这比将序列化的sortable显式附加到URL(或参数)有一个优点,因为order[]
如果li
列表中没有参数,它根本不包含参数.(当我遇到这个问题时,我正在使用,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