我曾经在我的所有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文件以正确读取字符串?
答案 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!