Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

Есть модуль, работающий при установленном 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.