2009-06-05 77 views
0

因为它的简单助手,我以前在所有的CakePHP项目中都使用了scriptaculous。随着时间的推移,我越来越多地使用jQuery,现在我想用jQuery脚本替换当前的脚本化脚本。到现在为止,一切都很好......除了jQuery可排序。在CakePHP中使用jQuery排序后发生AJAX失败

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邮政调用产生这样的事情:

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

但它没有似乎工作。我猜页[] = ID不同,老Scriptaculous的格式:

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

有谁知道我可以调整CakePHP的文件,以正确读取的字符串?

+0

什么是错误? – 2009-06-05 11:47:25

+0

啊......你能解释一下它的预期行为吗? – 2009-06-05 11:49:45

回答

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为帮助家伙!

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"

0

之前的foreach线,插入

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

,看到页面阵列的样子。然后正确迭代。