2009-06-05 78 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']); 

,看到頁面陣列的樣子。然後正確迭代。