Ajax-запросы к модулям и плагинам (и кастомным компонентам)
Анатомия AJAX запроса
Требуется
option=com_ajax
[module|plugin]=name
format=[json|debug|raw]
Опционально
method=[custom fragment]
по умолчанию становитсяget
, если не указано.
Обзор
Все запросы начинаются с ?option=com_ajax
, который вызывает это расширение, должны содержать в себе тип расширения для вызова и формат возвращаемых данных.
Дополнительные переменные и значения, используемые вашим расширением также могут быть включены в URL.
Например запрос к ?option=com_ajax&module=session
вызовет mod_session
с результатами, возвращенными в формате по умолчанию. Код ?option=com_ajax&plugin=session&format=json
вызовет метод onAjaxSession
плагинов с выводом результата в JSON.
Детали
Запросы плагинов должны включать в себя переменнуюplugin
в URL в паре с событием плагина, например plugin=session
для onAjaxSession
.
Это значение также используется для:
- Имени класса плагина, который следует соглашению
plgAjax[Name]
- Имени функции, которая следует соглашению
onAjax[Name]
/ - Группа плагинов по умолчанию
ajax
. Вы можете сменить её, указав параметр запросаgroup
(начиная с Joomla! 3.4).
Запрос к кастомным компонентам
Параметры запроса примерно такие: index.php?option=com_catalog&task=getAjax&action=methodname
.
При этом в главном контроллере должен быть прописан метод getAjax
:
public function getAjax() { $input = JFactory::getApplication()->input; $model = $this->getModel( 'ajax' ); $action = $input->getCmd( 'action' ); $reflection = new ReflectionClass( $model ); $methods = $reflection->getMethods( ReflectionMethod::IS_PUBLIC ); $methodList = array(); foreach ( $methods as $method ) { $methodList[] = $method->name; } if ( in_array( $action, $methodList ) ) { $model->$action(); } exit; }
А в модели ajax
должен быть метод methodname
:
public function methodname(){ try{ $result = 'answer'; echo new JResponseJson($result); }catch(Exception $e){ echo new JResponseJson($e); } exit; }