使用CakePHP中的jQuery可排序ajax调用更新DB

时间:2012-08-16 21:42:44

标签: jquery ajax jquery-ui cakephp jquery-ui-sortable

我正在尝试简单地使用jQuery的可排序对表中的行重新排序。我的拖放工作正常,我的问题是保存新的行顺序我的ajax调用,特别是将数据发送到我在CakePHP中的操作。我一整天都在搜索和尝试不同的事情但无济于事。基本上,根本没有更新数据库。

如果我使用空动作运行我的ajax调用,我可以获得成功:回调提醒某些内容,我理解这意味着它成功地执行了我的操作。如果我错了,请纠正我。这是我的jQuery和AJAX调用:

$('#featured-items tbody').sortable({

    cursor: 'move',
    stop:function(i) {

        $.ajax({
            type: "GET",
            url: "/admin/features/reorder",
            data: $('#featured-items tbody').sortable("serialize"),
            success: function() {
                alert($('#featured-items tbody').sortable("serialize"));
            }               
        });

    }

}).disableSelection();

我发送的数据是:

item[]=2&item[]=1&item[]=24

有人可以帮我理解如何在控制器操作中访问我的数据吗?到目前为止,我有这个(从其他例子来看)。我正在使用Cake 1.3,我的模型叫做Feature。

function admin_reorder()
{
    $this->autoRender = false;

    if($this->RequestHandler->isAjax())
    {
        foreach($this->data['item'] as $order => $id)
            $this->Feature->id = $id;
            $this->Feature->saveField('priority', $order);
    }
}

2 个答案:

答案 0 :(得分:1)

尝试使用$ _GET / $ _ POST代替$ this-> data:

function admin_reorder()
{
    $this->autoRender = false;

    if($this->RequestHandler->isAjax())
    {
        foreach($_GET['item'] as $order => $id)
            $this->Feature->id = $id;
            $this->Feature->saveField('priority', $order);
        }
    }

}

答案 1 :(得分:0)

据我所知,$this->data仅适用于发布的数据,而在您的AJAX调用中,您使用的是 GET 方法。尝试将您的方法更改为POST:

$('#featured-items tbody').sortable({

    cursor: 'move',
    stop:function(i) {

        $.ajax({
            type: "POST",
            url: "/admin/features/reorder",
            data: $('#featured-items tbody').sortable("serialize"),
            success: function() {
                alert($('#featured-items tbody').sortable("serialize"));
            }               
        });

    }

}).disableSelection();