@inviziblll

Как правильно передать параметры через Ajax в action Kohana?

Необходимо передать из jQuery в контроллер kohana параметры, для того чтобы сделать на странице постраничную навигацию, записи должны загружаться через Ajax.

Как правильно настроить путь в файле bootstrap.php к необходимому контроллеру, так чтобы он мог получать сразу два get параметра? Параметры: lines - число записей, pages - количество страниц.

Версия Kohana - 3.1.4
Код на стороне контроллера:
// Ajax функция - возвращает список таймеров (путь - timerslist)
    public function action_timers_list_ajax(){


            // данные из GET запроса       
            $lines = (int) $this->request->query('lines');
            $pages = (int) $this->request->query('pages');

            $data = array(
                'lines'    => $lines,
                'pages'  =>  $pages
            );
       
            // var_dump($data); 

            json_encode($data);
            exit;      

    }

Сейчас код в файле в bootstrap.php для экшена timers_list_ajax выглядит так:
Route::set('timerslist', 'timerslist(<controller>(/<action>(/<id>)))')
->defaults(array(
            'directory'  => 'index',
            'controller' => 'timer',
            'action' => 'timers_list_ajax',     
));

Как корректно указать вместо id параметры lines и page?

$.ajax({    
    type:"GET",
    url: "my_project/timerslist",  
    data: {"lines": 10, "pages": 1},
    contentType: 'application/json',
    dataType: "json"
}).done(function(response){         
console.log(response);
});
  • Вопрос задан
  • 391 просмотр
Пригласить эксперта
Ответы на вопрос 1
dohlik
@dohlik
Вы путаете параметры роутера с параметрами query string ($_GET), которые вообще в роутинге не указываются и могут быть любыми или вообще отсутствовать. В данном конкретном случае id в роуте не нужен. А параметры lines и pages надо извлекать из запроса через $this->request->query(), как-то так:

$data = array(
        'lines'    => (int)$this->request->query('lines') ?: 10,
        'pages'  => max(1, (int)$this->request->query('pages')),
    );

Хотя я бы использовал более общепринятые параметры типа offset/limit или page/perpage. Более понятные названия, имхо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы