使用可排序的 Jquery 在 Mysql DB 中存储 li 订单

Posted

技术标签:

【中文标题】使用可排序的 Jquery 在 Mysql DB 中存储 li 订单【英文标题】:Store li order in Mysql DB with Jquery sortable 【发布时间】:2013-12-15 22:27:58 【问题描述】:

我的站点中有一个可排序的列表,它使用 ajax 请求将列表项的顺序保存到 php 页面。 问题是当 LI(由数据库生成)的 id 超过 999 左右时,由于我发送到 PHP 页面的数组变得太长,它开始出错。

有更好的方法吗?

目前我的 Jquery/ajax 是:

$(function() 
$('#sortable').sortable(
    update: function(event, ui) 
        var order = []; 

        $('#sortable li').each( function(e) 
            order[ $(this).attr('id') ] =  $(this).index() + 1;
        );

        var request = $.ajax(
            url: "ajax/save_order.php",
            type: "POST",
            data: positions : order,
            dataType: "json"
        );
    
);
);

我的 PHP 页面是:

$positions = $_POST['positions'];

foreach ($positions as $id_section => $order)

    $sql = sprintf("
        UPDATE      section_order
        SET     id_order = %d
        WHERE       id_section = %d
    ",
        $order,
        $id_section
    );
    $result = mysql_query($sql);

我一直在尝试如何将数据从可排序的数据中获取到 jquery 中的多维数组中,但目前正在绘制空白。

【问题讨论】:

我对此感到困惑..“超过 999 左右开始出错”是什么错误? 您可以将数据作为 CSV 列表发送,我假设您的 ids 都是数字,因此它们应该按照放置顺序保存在数组中。这可能会减少发送到服务器的数据量,但您必须为此调整您的 php @superphonic 没有错误,但控制台似乎表明计算数组中的所有行需要很长时间才能超时。 在下面查看我的答案... 【参考方案1】:

好的,我明白了。对于用户来说,在 1000 多个项目的列表中手动拖放项目似乎有点笨拙。但我不知道您如何/为什么这样做,因此假设它适用于您的应用程序。

以下解决方案实际上来自这个SO问题jQuery UI Sortable, then write order into a database

jQuery Sortable 有一个序列化函数,可以为你获取订单。像下面这样使用它:

$('#sortable').sortable(
    axis: 'y',
    stop: function (event, ui) 
        var data = $(this).sortable('serialize');

        // POST to server using $.post or $.ajax
        $.ajax(
            data: data,
            type: 'POST',
            url: 'save_order.php'
        );
    
);

save_order.php 文件中,只需检查发布的数据是什么样子并循环通过它,应该能够执行以下操作:

<?php
    foreach ($_POST['each_item_whatever...'] as $value) 

        // Database stuff

    
?>

【讨论】:

以上是关于使用可排序的 Jquery 在 Mysql DB 中存储 li 订单的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI 可排序的默认顺序

具有 i18n(排序规则)支持的 JQuery 可过滤插件

使用 jquery .ajax 从 mySQL DB 中检索记录

如何使用 Jquery EasyUI 将文件上传到 DB mysql?

使 jQuery 可放置接受来自使用 connectWith 的可排序的项目

按计算距离对 MySQL 结果排序(距离未存储在 DB 中)