当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《jQuery:如何处理sortable('serialize')返回的列表?》经验,为你挑选了3个好方法。

使用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});



1> bart..:

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

var order = $('#projects ul').sortable('serialize',{key:'string'});

$.post('ajax.php',order+'&action=updateOrder');


用'toArray'查看答案.这也是一个非常好的选择.http://jqueryui.com/demos/sortable/#method-toArray

2> David Waller..:

我认为最好的方法是不使用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从一个列表中拖动所有内容).相反,附加序列化的可排序将留下不需要的"&".



3> Daniel Von F..:

让我们说你正在订购新闻,你的页面发送到"?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

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有