Основной курс по Joomla
0 Пользователей и 1 Гость просматривают эту тему.
  • 3 Ответов
  • 937 Просмотров
*

eugenex

  • Осваиваюсь на форуме
  • ***
  • 51
  • 0
Возникла надобность выполнить ajax-запрос. В общем-то любым способом, который потребует наименьших усилий.
Попалась вот такая статья: http://inet-reklama.com/blog/joomla/ajax-v-joomla-3-2.html

Там описывается, как можно посылать ajax-запросы в модули и плагины, используя компонент com_ajax.
Я решил поместить обработчик запроса в плагине, так как создавать для этого модуль совсем нелогично.
Честно говоря, я решил пока не создавать новый плагин, а использовать один из уже установленных.
Я выбрал плагин recaptcha и следовал инструкциям из приведенной статьи.

В файле recaptcha.php я создал метод onAjaxRecaptcha
Цитировать
   public function onAjaxRecaptcha() {
      $input = JFactory::getApplication()->input;
      $text = $input->getString("text");
      $log = fopen('ajaxlog.txt', 'a+');
      fwrite($log, 'ajax AJAX '.$text);
      fclose($log);
      echo $text;
   }

Запрос отправляю так
Цитировать
   $('#order_submit').click(function() {
      $.post( "index.php?option=com_ajax&plugin=recaptcha&format=raw&text=proizvolnij_text", function(data) {
         alert(data);
      });
   });

В свой обработчик я не попадаю, что видно хотя бы по тому, что не создался файл ajaxlog.txt, ну и alert выдает пустое окошко.
Использую Joomla 3.4.

Еще одна деталь.  Автор статьи пишет: "Важно! - при запросе в плагины, будут использоваться только те плагины которые находятся в группе AJAX!".
А какие плагины находятся в группе AJAX?
*

beliyadm

  • Профи
  • ********
  • 8359
  • 1527
  • Севастополь == Россия
А смысл?
У вас уже есть компонент com_ajax
В нем создаете функцию и к ней обращаетесь
К примеру файл \components\com_ajax\ajax.php выглядит так

Код: php
$Itemid	= JRequest::getInt( 'Itemid', 1, 'get' );
$task = JRequest::getVar( 'task', 1, 'get' );
switch ($task)
{
 case 'mytask':
 mytask();
 break;
}

function mytask()
{
echo 'mytask';
}

В своем js обработчике с фронта вызываете эту функцию (понятно, что это я выдрал из обработки формы, но суть думаю ясна)
Код: javascript
$('#block').on('click', ".button", function(){
$.ajax({
           type: 'POST',
               url: '/index.php?option=com_ajax&format=raw&task=mytask',
               target: '',
               data: form_data,
               cache: false,
success: function(response){
$('#success').text(response);
}
});
});

В итоге у вас в блоге с id=success появится текст "mytask"

Либо можно сделать свой файл обработчик (вместо компонента), в котором подгружать ядро и пользоваться стандартными опциями движка в плане API, если так интересно - тоже покажу пример
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb
*

eugenex

  • Осваиваюсь на форуме
  • ***
  • 51
  • 0
Да, так конечно лучше будет.

У меня получается сейчас отправить запрос в AJAX.php, но не получается, судя по всему, принять там параметры.

Вот мой код
Цитировать
$task   = JRequest::getVar( 'task', 1, 'get' );
//$input = JFactory::getApplication()->input;
//$task = $input->getString('task , 0);

switch ($task)
{
   case 'order' :
      $log = fopen('ajaxlog.txt', 'a+');
      fwrite($log, 'ajax  '.$text);
      fclose($log);
      $txt   = JRequest::getVar( 'txt', 1, 'get' );
      orderMail($txt);
      
      break;
}

Так отправляю запрос
Цитировать
   $('#order_submit').click(function() {
      $.ajax({
              type: 'POST',
               url: '/Joomla/index.php?option=com_ajax&format=raw&task=order',
               data: {txt: 'proizvolnijtext'},
            success: function(response){
               alert(response);
            }
      });
   });

В case 'order' я не попадаю. В AJAX.php запрос приходит, что видно хотя бы потому, что если сделать в нем ошибку, она возвращается алертом.

*

eugenex

  • Осваиваюсь на форуме
  • ***
  • 51
  • 0
А все получилось, просто нужно было "amp;" из URL убрать.  Наверное, это форум так "отформатировал".
« Последнее редактирование: 13.06.2015, 01:59:40 от eugenex »