使用Jquery sortable在mysql DB中存储li命令

时间:2013-11-29 17:11:05

标签: php jquery mysql jquery-ui jquery-ui-sortable

我的网站中有一个可排序的列表,它将带有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);
}

我一直在努力研究如何将数据从sortable中提取到jquery中的多维数组中,但目前我正在绘制一个空白。

1 个答案:

答案 0 :(得分:1)

好的,我明白了。对于用户手动拖放超过1000个项目的列表中的项目,似乎有点笨拙。但我不知道你是如何/为什么这样做所以假设它适用于你的应用程序。

以下解决方案实际上来自此问题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

    }
?>