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

Выполнение ajax-запросов в модуле при vqmod

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

Есть модуль, работающий при установленном vqmod. Требуется выполнить ajax-запрос к контроллеру модуля.

Post-запрос до контроллера  не доходит, потому что не проходит валидацию в vqmode/vqcache/vq2-admin_controller_catalog_product.php.  Там ожидается параметр product_description  содержащий ассоциативный массив.

 

Если выполнять get-запрос, то в контроллере условие if (isset($this->request->get['option_req'])) где я его должен обработать  не выполняется.

В ответе сервера возвращается страница целиком, вместе с верхним меню.

 

Что нужно сделать, чтобы при установленном vqmod ajax-запросы выполнялись как обычно?

 

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


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

вы пишите 

Требуется выполнить ajax-запрос к контроллеру модуля.

 

но запросы зачем-то шлете контроллеру товара vq2-admin_controller_catalog_product.php

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

 

у вас написан обработчик ajax запросов ?

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


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

Я уже понял свою основную ошибку. Раньше я работал с модулем такой структуры, которая не требовала указания url в функции $.ajax.

Сейчас скрипт, выполняющий ajax-запросы находится в файле vqmod\xml\имя_модуля.xml и url нужно указать явно.

То есть, вопрос на самом деле в том, как определить url контроллера.

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


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

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

 

у вас написан обработчик ajax запросов ?

Нет, модуль имеет свой контроллер в папке admin/controller/module.   Обработчик ajax запросов я в нем написал.

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


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

Урл контроллера я указал, но проблемы остались.

JS выглядит сейчас так:

                $("#mastop").live("change", function() {

                    alert('change');

                    $.ajax({

                        url: "/admin/index.php?route=module/related_options&token=2e2687166c3a2ae113844508b9a447c3",

                        type: 'get',

                        data: {

                            option_req: 'option_req'

                        },

                        success: function(content) {

                            alert(content);

                        },

                        error: function() {

                            alert('error');

                        }

                    });            

                });

А обработчик в контроллере так:

        if (isset($this->request->get['option_req'])) {

             $this->template = 'module/related_options_item.tpl';

             echo $this->render();

            die;

        }

url сейчас подставляется такой: /admin/index.php?route=module/related_options&token=2e2687166c3a2ae113844508b9a447c3

 

Если я его вставляю в адресную строку браузера, то обработчик запроса выполняется, а вот из ajax по-прежнему нет.

 

При этом коллбэк success вызывается, но в параметре content что-то совершенно не то, возможно 404 страница Денвера.  Факт попадания в блок if (isset($this->request->get['option_req'])) проверяю логированием.

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


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

Все-таки неправильно формировал url,

А правильно так:

$this->url->link('module/related_options', 'token='.$this->session->data['token']);

 

Только потом еще пришлось вырезать "amp;" который зачем-то вставляется, причем не вместо "&", а после него)

Теперь работает.

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


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

Все-таки неправильно формировал url,

А правильно так:

$this->url->link('module/related_options', 'token='.$this->session->data['token']);

Только потом еще пришлось вырезать "amp;" который зачем-то вставляется, причем не вместо "&", а после него)

Теперь работает.

 

Если это предназначено только для администратора, то будет работать нормально. Выйдите из админки и код перестанет работать.

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


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

Если это предназначено только для администратора, то будет работать нормально. Выйдите из админки и код перестанет работать.

А если не только для администратора, тогда как?

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


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

А если не только для администратора, тогда как?

 

Уже проверили? могу ошибаться. Вынесите контроллер админки module/related_options в каталог и шлите запросы к нему.

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


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

Уже проверили? могу ошибаться. Вынесите контроллер админки module/related_options в каталог и шлите запросы к нему.

Нет, не проверял. Интересно с точки зрения общего развития. У меня как раз функционал только для админки.

 

А вот что действительно важно: нужно тот ajax -запрос выполнять при выборе опции в автокомплитере при редактировании товара. То есть, запрос должен выполняться, когда новая опция, которую выбрали в автокомплитере появляется в списке над автокомплитером. Не найду, что за событие и на каком элементе там отлавливать.

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


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

Нет, не проверял. Интересно с точки зрения общего развития. У меня как раз функционал только для админки.

 

А вот что действительно важно: нужно тот ajax -запрос выполнять при выборе опции в автокомплитере при редактировании товара. То есть, запрос должен выполняться, когда новая опция, которую выбрали в автокомплитере появляется в списке над автокомплитером. Не найду, что за событие и на каком элементе там отлавливать.

 

Это я чего-то перемудрил. Я просто подумал, что Вы используете $this->session->data['token'] в витрине магазина, а не в админке. Все гуд.

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


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

Нет, не проверял. Интересно с точки зрения общего развития. У меня как раз функционал только для админки.

 

А вот что действительно важно: нужно тот ajax -запрос выполнять при выборе опции в автокомплитере при редактировании товара. То есть, запрос должен выполняться, когда новая опция, которую выбрали в автокомплитере появляется в списке над автокомплитером. Не найду, что за событие и на каком элементе там отлавливать.

в admin\view\template\catalog\product_form.tpl

смотрите секцию $('input[name=\'option\']').catcomplete({

 

контроллер admin\controller\catalog\option.php, autocomplete()

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


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

в admin\view\template\catalog\product_form.tpl

смотрите секцию $('input[name=\'option\']').catcomplete({

 

контроллер admin\controller\catalog\option.php, autocomplete()

Да, нашел там

$('#option-' + option_row).trigger('click');

Его и ловлю.

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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