1

我发现了一个很棒的 jquery 插件,叫做nestedSortable,它工作得很好。现在我需要做的就是用新的排序顺序更新我的数据库。我正在使用 PHP。

这就是我感到困惑的地方。在提供的示例中,提供了三种获取输出的方法。序列化、层次结构和数组。

如何修改 javascript 以允许我将输出发送到 PHP 以通过 POST 进行处理?

我已经通读了整个插件论坛,并从想要这个确切功能的人那里找到了一丝希望。不幸的是,它是 BYO getItemIdFromElement($element),插件的开发人员说他的数组函数用更简洁的代码做了完全相同的事情......

如果有人可以帮助我理解这一点,我希望并且非常感激!

蒂姆

4

2 回答 2

7

我自己也遇到过这个问题。在论坛上发布了一个解决方案,可以通过表单(表单解决方案)保存列表。我个人更喜欢 AJAX,所以我编写了自己的解决方案。要以 AJAX 方式解决您的问题,您必须按如下方式更改代码:

改变:

    $('ol.sortable').nestedSortable({
        disableNesting: 'no-nest',
        forcePlaceholderSize: true,
        handle: 'div',
        helper: 'clone',
        items: 'li',
        maxLevels: 3,
        opacity: .6,
        placeholder: 'placeholder',
        revert: 250,
        tabSize: 25,
        tolerance: 'pointer',
        toleranceElement: '> div'
    });

在:

$('ol.sortable').nestedSortable({
    disableNesting: 'no-nest',
    forcePlaceholderSize: true,
    handle: 'div',
    helper: 'clone',
    items: 'li',
    maxLevels: 3,
    opacity: .6,
    placeholder: 'placeholder',
    revert: 250,
    tabSize: 25,
    tolerance: 'pointer',
    toleranceElement: '> div',
    update: function () {
        list = $(this).nestedSortable('toHierarchy', {startDepthCount: 0});
        $.post(
            'http://www.domainname.com/ajax/ajax.php',
            { update_sql: 'ok', list: list },
            function(data){
                $("#result").hide().html(data).fadeIn('slow')
            },
            "html"
        );
    }
});

然后你需要创建一个 ajax.php 页面来处理数据:

<? if (!empty($_REQUEST["list"]) && !empty($_REQUEST["update_sql"])) {

if ($_REQUEST["update_sql"] = 'ok') {

    if (!empty($_REQUEST["list"])) {
        $list = $_REQUEST["list"];
        foreach ($list as $key => $value) {

            mysql_query("UPDATE categories SET order = '" . $key . "' WHERE id = '" . $value['id'] . "'");

        }
        echo '<span class="success">Successfully updated.</span>';
    }
} } ?>

PHP 代码可以改进(检查 MySQL 注入等)。您也可以删除示例中提供的其他功能,因为您不需要它们。不要忘记更改 JavaScript 中的 POST URL ;) 祝你好运!

于 2011-07-06T18:36:29.610 回答
0

您可以使用.ajax( ) 将序列化数据发送到您的 PHP 脚本并指定 POST 作为您的数据类型。

您也可以使用隐藏值填写表单,然后提交,但这似乎很脏。

于 2011-03-12T04:09:07.430 回答