Перейти к содержанию
Muvka

Как правильно сделать запрос на подгрузку товаров?

Рекомендуемые сообщения

Пытаюсь сделать ajax подгрузку товаров с фильтром. Проблема вот в чем. Сделал маленький скрипт, для теста и когда его выполняю, происходит такая штука. Отправляю запрос:

Request URL: http://localhost:3000/index.php?route=product/category&path=59&sort=p.price&order=ASC&price_min=12000&price_max=15000&page=2&is_ajax=1
Request Method: GET
Status Code: 301 Moved Permanently (from disk cache)

И в итоге идет перенаправление на http://localhost:3000/stoly?page=2 и при этом теряются все переданные параметры, кроме page. Подскажите, можно ли побороть и как?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

поподробнее js запрос и product/category/index, что содержит для обработки ajax запроса?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обычный котроллер категории, только с добавлением строк для фильтрации по цене.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

переменная is_ajax лишняя, в коде контроллера

if(!empty($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{    
// ajax
  exit;    
}
// не ajax


 

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 minutes ago, Muvka said:

Обычный котроллер категории, только с добавлением строк для фильтрации по цене.

ну так и не будет работать, контроллер должен выдавать данные для ajax запроса, а не страницу. потом в javascript данные уже догружаешь к концу данных

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вообщето нормально подгружает. Но берет только один параметр - page, остальные исчезают. Мне нужно понять, почему и как сделать, чтобы не пропадали. Писать новый контроллер и плодить одинаковый код не хочется.

Изменено пользователем Muvka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде разобрался. В catalog/controller/startup/seo_url.php

if (isset($this->request->get['page'])) $arg = $arg . '?page=' . (int)$this->request->get['page'];

в ветке product/category заменил на 

if (isset($this->request->get['is_ajax'])) {
    $arg = $arg . '?is_ajax=' . (int)$this->request->get['is_ajax'];
    if (isset($this->request->get['sort'])) $arg = $arg . '&sort=' . $this->request->get['sort'];
    if (isset($this->request->get['order'])) $arg = $arg . '&order=' . $this->request->get['order'];
    if (isset($this->request->get['price_min'])) $arg = $arg . '&price_min=' . (int)$this->request->get['price_min'];
    if (isset($this->request->get['price_max'])) $arg = $arg . '&price_max=' . (int)$this->request->get['price_max'];
    if (isset($this->request->get['page'])) $arg = $arg . '&page=' . (int)$this->request->get['page'];
} else {
    if (isset($this->request->get['page'])) $arg = $arg . '?page=' . (int)$this->request->get['page'];
}

Теперь нормально срабатывает.

Изменено пользователем Muvka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня только вопрос - чем обработать 

if (isset($this->request->get['sort'])) $arg = $arg . '&sort=' . $this->request->get['sort'];

для безопасности?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по идее все нечисловое через $this->db->escape($xxx)

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я догадывался, просто смущает, что это метод db) Но спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.