Ошибка AJAX после использования сортировки jQuery в CakePHP - PullRequest
0 голосов
/ 05 июня 2009

Я имел обыкновение использовать scriptaculous во всех моих проектах CakePHP из-за его простых помощников. Со временем я все больше и больше увлекался jQuery, и теперь я хочу заменить свои текущие скриптовые скрипты скриптами jQuery. До сих пор все было хорошо ... за исключением сортировки 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 производит что-то вроде этого:

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

Однако, похоже, это не работает. Я думаю, страница [] = id отличается от старого скриптового формата:

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

Кто-нибудь знает, как я могу настроить файл CakePHP для правильного чтения строки?

Ответы [ 3 ]

1 голос
/ 05 июня 2009

У меня нет рабочей среды 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 голосов
/ 06 июня 2009

Ах, наконец ... Оказалось, что вывод 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, и он оказался победителем! Спасибо за помощь, ребята!

0 голосов
/ 05 июня 2009

перед строкой foreach, вставьте

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

и посмотрите, как выглядит массив страниц. затем выполните итерацию правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...