0 Пользователей и 1 Гость просматривают эту тему.
  • 8 Ответов
  • 1526 Просмотров
*

smokepeng

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Не могу нормально передать из JS в helper модуля данные из формы через компонент com_ajax.
JS опрашивает поля формы, формирует объект JS, далее преобразую его в JSON строку и через JQuery и com_ajax делаю AJAX запрос в модуль ('format' : 'raw'). Helper модуля пока тупо возвращает принятые данные и JS просто вставляет их в блок. Данные оказываются слеплены в одну единую строку, никаким JSON там не пахнет. То есть, вместо передаваемого {"email": "myemeil"}, получается строка emailmyemail. Если полей несколько, то все это идет слеплено в одну строку.
Как тогда передать в модуль кучу данных?
« Последнее редактирование: 01.02.2015, 09:10:21 от smokepeng »
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

smokepeng

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
ТАк вы формат json передавайте в com_ajax, а не raw...
Так "raw" имеет отношение к ВОЗВРАЩАЕМЫМ com_ajax данным, а не к передаваемым ему.

Обнаружилась еще одна кака. Ладно, черт с ним, передаю не JSON а отдельно полями, но email не передается корректно -- вырезается собака @.
То есть, в даных есть поле email: 'email@dom.en'
в Helper передается 'emaildom.en'
Похоже, вырезаются некоторые символы, отсюда и невозможность нормально передать JSON строку. А кто режет -- понять не могу, то ли компонент com_ajax, то ли JQuery.ajax()
Может какое-то экранирование имеется, в описаниях не нашел или в принципе невозможно передать произвольные символы?

В описании JQuery.ajax() нашел параметр
processData - если указано значение false, то данные, указанные в опции data, не будут преобразовываться в строку запроса, но опытным путем выяснилось, что он не имеет отношение к моей проблеме. Или имеет, но не только он. :(
« Последнее редактирование: 01.02.2015, 09:16:00 от smokepeng »
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Так задача com_ajax просто вызывать Ваш метод в хелпере. Он данные не получает.

Вы в хелпере как данные получаете?
*

smokepeng

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Код
    public static function getAjax(){
    
        $input = JFactory::getApplication()->input;
        

        $visitorMail = $input->get('email');
         print '<p>'.$visitorMail.'</p>';

Передаю
Код
request =   {
'option' : 'com_ajax',
'module' : 'simplefeedback',
'name'   :  name,
                        'email'  :  email,
                        'text'   :  text,
'format' : 'raw'
                        
                        };
            $.ajax({
type   : 'POST',
                processData: 'false',
data   : request,
success: function (response){
                           $('p.fbstatus').html(email+'  '+response);
                          
         }
            });
и вот email печатается корректно, а возвращается уже порезаный (ну это понятно, так как он уже в Helper приходит порезанный)

update:
исследовал текст компонентa AJAX, никаких преобразований и фильтраций в нем вроде нет
фильтруются многие другие символы типа знака препинания и т.п. "подчеркивание" и "минус", проходят.
« Последнее редактирование: 01.02.2015, 11:44:03 от smokepeng »
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Вы перед отправкой проверьте что у вас в полях отправляет скрипт!
И попробуйте слать так:
Код: php
       
        var form =$(".form_class");
        $.ajax({
            type: 'POST',
            cache: false,
            dataType: 'json',
            url: form.attr('action'),
            data: form.serializeArray(),
            success: function (response) {
               alert(response)
            }
        });
« Последнее редактирование: 01.02.2015, 12:13:26 от Istaan »
*

smokepeng

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
В общем, одну загогулину решил.

В helper нужно было получать почтовый адрес   но вторым параметром тогда нужно было задать строкой фильтр (что это такое и как с ним работать я пока  не стал разбираться)
Код
$visitorMail = $input->get('email', 'filter');

либо для строкового параметра так
Код
$visitorMail = $input->getString('email');

Все символы при этом передаются (включая русские буквы).

Пусть пока будет так, с передачей массивов в целом и с JSON в частности разберусь потом.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
В общем, одну загогулину решил.

В helper нужно было получать почтовый адрес   но вторым параметром тогда нужно было задать строкой фильтр (что это такое и как с ним работать я пока  не стал разбираться)
JInput - получение и фильтрация переменных запроса
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Дима, когда есть уже встроенные функции, Jinput выглядит как костыль
Код: php-brief
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
Jinput  здесь незачем если нативные функции php выполняют желаемый результат
Код: javascript
$( "form" ).on( "submit", function( event ) {
//остановили стандартное событие отправки формы
event.preventDefault();
var that = this;
$.post('obrabotchik.php', $(that).serialize(), function(response){
// здесь обрабатываем response ответ в json
}, 'json');
});
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отправка файлов через ajax в модуль Joomla

Автор hemicide

Ответов: 19
Просмотров: 1077
Последний ответ 11.04.2022, 08:44:33
от sivers
Странное поведение JResponseJson или com_ajax

Автор platonische

Ответов: 8
Просмотров: 667
Последний ответ 11.01.2020, 11:56:22
от platonische
com_ajax использование модуля

Автор Wertos

Ответов: 32
Просмотров: 4680
Последний ответ 24.11.2019, 18:33:57
от CB9T
com_ajax передача данных из формы POST

Автор ChervonStudio

Ответов: 27
Просмотров: 3642
Последний ответ 12.06.2017, 18:09:24
от ProtectYourSite
Структура компонента (1 запись + JSON ИЛИ Много записей)

Автор platonische

Ответов: 4
Просмотров: 898
Последний ответ 02.03.2017, 15:18:26
от passer