Jump to content
Sign in to follow this  
eugenex

Выполнение 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-запросы выполнялись как обычно?

 

Share this post


Link to post
Share on other sites

вы пишите 

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

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

Share this post


Link to post
Share on other sites

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

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'])) проверяю логированием.

Share this post


Link to post
Share on other sites

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

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

Да, нашел там

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

Его и ловлю.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.