【问题标题】:Serialize data for AJAX using HTML5sortable使用 HTML5sortable 为 AJAX 序列化数据
【发布时间】:2012-11-15 12:07:06
【问题描述】:

我正在使用一个简洁的 jQuery 排序插件,HTML5 Sortable http://farhadi.ir/projects/html5sortable/,但还没有找到一种理想的方式来序列化数据以作为 AJAX POST 请求发送(以更新数据库)。

HTML

<ul class="sortable">
    <li data-id="1">One</li>
    <li data-id="2">Two</li>
    <li data-id="3">Three</li>
    <li data-id="4">Four</li>
    <li data-id="5">Five</li>
</ul>

jQuery

$('ul.sortable').sortable().bind('sortupdate', function() 
{
   var data = ??;  // serialize all data-id's ... this is my problem

   $.post('/sortupdate.php',data,function(){ // PHP script sets new order in DB
       alert('updated');
   });
});

所以我想要发生的是,当我将一个 LI 项目拖到一个新位置时,sortupdate 事件应该触发该函数并发送新的 data-id 属性值顺序。我目前的想法是遍历 LI 并将属性值添加到数组中。有没有更聪明的方法可以做到这一点,或者,最有效的循环方式是什么? (我主要是你认识的后端人员)。谢谢!

【问题讨论】:

    标签: jquery sorting


    【解决方案1】:

    由于插件没有内置的序列化方法,你必须手动完成。

    var dataIDList = $('ul.sortable li').map(function(){ 
        return $(this).data("id");
    }).get().join(",");
    

    (本质上就是你最后描述的,它循环并创建一个列表。)

    现在您可以将其发布为列表:

    $.post(url,{ idlist: dataIDList }, completeandler);
    

    您也可以将其发布为数组,只需删除 .join(",");

    【讨论】:

    • 看起来很棒!但是 jQuery data() 对我来说是新的,我想我会使用 'return $(this).attr("data-id")' - data() 更好吗?
    • 视情况而定。 .data 尝试猜测值的预期类型应该是什么,例如, 1 将被解析为整数, { foo: "bar" } 将被解析为对象等。在您的情况下,您不需要真的很在意它是 int 还是 string,所以使用你喜欢的那个。如果性能成为问题,.attr() 应该更快。
    • 感谢您的解释!我测试了,你解决了我的问题! :)
    • Plus1 作为答案...但是我更喜欢使用$(this).children().map() 而不是再次指定元素...因为页面中可能存在多个 ul.sortable。
    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2014-07-23
    • 2012-02-02
    • 1970-01-01
    • 2016-11-09
    • 2016-06-24
    相关资源
    最近更新 更多