Получение ajax запроса

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#1 Вчера в 11:18

У меня возникла проблема с реализацией AJAX‑эндпоинта для получения статистики по выбранному диапазону дат. По умолчанию стандартные периоды (Сегодня, Вчера, Неделя, Всего) отображаются корректно, но когда я пытаюсь получить данные по произвольному диапазону (через GET‑параметры start и end), возвращается ошибка 404.

в grid_adblock.php

добавил        

  1. 'title' => 'Статистика',
  2. 'class' => 'view ajax-modal',
  3. 'href' => href_to($controller->root_url, 'adblock_statistics', array('{id}')),
  4. )

Появляется модальное окно.

Изображение

Я создал файл с названием adblock_statistics_ajax.php в каталоге
/system/controllers/adsman/backend/actions/
и внутри файла объявил класс:

  1. <?php
  2.  
  3. class actionAdsmanAdblockStatisticsAjax extends cmsAction {
  4.  
  5. public function run($id) {
  6. if (!$this->request->isAjax()) {
  7. cmsCore::error404();
  8. }
  9.  
  10. ini_set('display_errors', 0);
  11.  
  12. $start = $this->request->get('start', '');
  13. $end = $this->request->get('end', '');
  14.  
  15. if (empty($start) || empty($end)) {
  16. return $this->cms_template->renderJSON(['error' => 'Начальная и конечная даты обязательны.']);
  17. }
  18.  
  19. try {
  20. $result = $this->model->getRangeStatistics($id, $start, $end);
  21. if (!$result) {
  22. $result = ['hits' => 0, 'click' => 0];
  23. }
  24. return $this->cms_template->renderJSON($result);
  25. } catch (Exception $e) {
  26. return $this->cms_template->renderJSON(['error' => $e->getMessage()]);
  27. }
  28. }
  29. }
  30.  

В методе вызывается метод модели getRangeStatistics, который дополняет переданные даты до «00:00:00» и «23:59:59» и возвращает сумму значений в колонках hits_count и click_count.

Маршрутизация:
URL для AJAX‑запроса формируется функцией href_to

  1. $rangeUrl = href_to($this->controller->root_url, 'adblock_statistics_ajax', array($ads['id']));

Однако, при прямом обращении по полученному URL, например:

  1. https://example.com/admin/adsman/adblock_statistics_ajax/2?start=2025-01-01&end=2025-10-10

возвращается ошибка 404.

Какие ещё возможны причины, по которым файл моего AJAX‑эндпоинта не находится системой?
Как правильно настроить маршрутизацию для такого эндпоинта, чтобы URL, сформированный через href_to, корректно указывал на мой файл adblock_statistics_ajax.php?
Может ли проблема быть связана с значением $this->controller->root_url или с какими-либо настройками системы, влияющими на поиск файлов в каталоге /system/controllers/adsman/backend/actions/?


Буду благодарен за любые советы или решения, которые помогут устранить ошибку 404 для моего AJAX‑эндпоинта и правильно получать данные по произвольному диапазону дат.

#2 Вчера в 11:28

при прямом обращении по полученному URL, например:

Litemir

Думаю, так и должно быть. Работает

  1. if (!$this->request->isAjax()) {
  2. cmsCore::error404();
  3. }
#3 Вчера в 11:32
при прямом обращении по полученному URL, например: Litemir Думаю, так и должно быть. Работает if (!$this->request->isAjax()) { cmsCore::error404(); }
IamB

Это понятно. Как получить данные, вот вопрос.

Сегодня в 18:04
#4 Вчера в 11:40

А вместо return echo не пробовали? Вы еще заголовок должны послать перед этим.

#5 Вчера в 12:04

Покажите код при нажатии кнопки Показать, где у вас отправляется ajax запрос

Однако, при прямом обращении по полученному URL, например: возвращается ошибка 404.

Litemir

Прямой это не аякс запрос, а у вас в коде 

  1. if (!$this->request->isAjax()) {
  2. cmsCore::error404();
  3. }
#6 Вчера в 12:08

Всем спасибо. Вопрос решён. Была моя не внимательность.

Похожие темы

Похожее в блогах

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.