使用CakePHP中的jQuery可排序后AJAX失败

时间:2009-06-05 11:32:41

标签: jquery-ui cakephp jquery

我曾经在我的所有CakePHP项目中使用scriptaculous,因为它很容易帮助。随着时间的推移,我越来越多地使用jQuery,现在我想用jQuery脚本替换当前的scriptaculous脚本。到目前为止,一切都很好......除了jQuery可排序。

JQuery可排序运行,但之后的AJAX调用无法正常运行。现在我的程序员正在度假,所以我得问你们:

旧的CakePHP代码(在pages_controller.php内):

function order($parent_id = 0){
    $this->autoRender=false;

    //Users with rights may view this
    $user = $this->checkRights('pages',true);

    //loop through the data sent via the ajax call
    foreach ($this->params['form']['page'] as $order => $id){
        $this->Page->id = $id;
        if(!$this->Page->saveField('order',$order)) {
            $this->flash('Really freaky errors are occuring','/');
            exit();
        }
    }

}

我的jQuery看起来像:

    $(".sortable-list").sortable({
    update: function() {
        $.post('/pages/order/0', {
            data: $('.sortable-list').sortable("serialize")
        });
    }
});
$(".sortable-list").disableSelection(); 

使用Firebug,我看到AJAX post调用会产生类似这样的内容:

    page[]=14&page[]=23&page[]=18&page[]=11&page[]=26&page[]=28

然而,它似乎不起作用。我猜页面[] = id与旧的scriptaculous格式不同:

pages_0[] 1
pages_0[] 3
pages_0[] 2

有谁知道如何调整CakePHP文件以正确读取字符串?

3 个答案:

答案 0 :(得分:1)

我没有工作的PHP环境来测试,但应该基本上工作。

$pages = $_GET['page'];

foreach( $pages as $order => $id)
{
     $this->Page->id = $id;
            if(!$this->Page->saveField('order',$order)) {
                        $this->flash('Really freaky errors are occuring','/');
                        exit();
                }

}

PS。可能你有问题更新"$this->params"

答案 1 :(得分:0)

在foreach行之前,插入

debug($this->params['form']['page']);

并查看页面数组的外观。然后正确迭代。

答案 2 :(得分:0)

啊,最后..原来,jquery的输出是:data:'& page_0 [] = 1etc'。我不得不把它变成page_0而不是数据并修复它!

所以:

    $(".sortable-list").sortable({
    update: function() {
        $.post('/pages/order/0/, $('#pages_0').sortable("serialize", {key: 'pages_0[]'}))
    }
});
$(".sortable-list").disableSelection(); 

我从$ .post的第二个参数中移除了{},结果证明是赢家! thx for the help guys!