Форум русской поддержки Joomla!® CMS
27.07.2017, 22:31:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Основной курс по Joomla
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

com_ajax передача данных из формы POST

 (Прочитано 322 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« : 11.06.2017, 18:31:11 »

Привет! Делаю модуль. Пытаюсь передать данные из формы в default.php при помощи com_ajax. Итак что я делаю

В файле helper.php добавил класс
Код
public static function getAjax() {
// Get module parameters
jimport('joomla.application.module.helper');
$input  = JFactory::getApplication()->input;
$module = JModuleHelper::getModule('auction');
$params = new JRegistry();
$params->loadString($module->params);
}

в mod_name.php добавил форму и JS
Код
<form method="post" action="this.form.submit();" name="form1" id="lol">
   <input type="text" name="price" onclick="function1();">value1</input>
</form>
 
<script>
jQuery.noConflict();
  function function1() {
   var data = jQuery("lol").serialize();
   jQuery.ajax({
       url: "index.php?option=com_ajax&module=auction&method=post&format=json",
       type: "POST",
       data: data,
       success: function(data){
           alert(data);
       }
   });
};
</script>

Вопрос. Как мне эти данные получить в default.php ? И все ли я сделал правильно?
Записан
ProtectYourSite
Завсегдатай
*****

Репутация: +46/-4
Offline Offline

Сообщений: 787



« Ответ #1 : 11.06.2017, 18:55:09 »

Для каких целей получать данные?  Default.php это файл отображения, если с данными необходимо что-то делать, то лучше в helper обрабатывать.
Записан
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #2 : 11.06.2017, 18:56:59 »

Для каких целей получать данные?  Default.php это файл отображения, если с данными необходимо что-то делать, то лучше в helper обрабатывать.

В default.php я получить переменную и записать в базу. Но у меня ругается консоль на url запроса...
Записан
ProtectYourSite
Завсегдатай
*****

Репутация: +46/-4
Offline Offline

Сообщений: 787



« Ответ #3 : 11.06.2017, 19:19:07 »

В default.php я получить переменную и записать в базу. Но у меня ругается консоль на url запроса...
Google Translate? Скрин консоли?
Записан
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #4 : 11.06.2017, 20:04:55 »

Google Translate? Скрин консоли?

Сейчас код в mod_name.php вот такой. При нажатии на кнопку выдает алерт с [object Object]
Код
<form method="POST" id="formx" action="javascript:void(null);" onsubmit="function1()">
<legend>Test From</legend>
<label for="name">Name:</label><input id="name" name="name" value="" type="text">
<label for="email">Email:</label><input id="email" name="email" value="" type="text">
<input value="Send" type="submit">
</form>
 
<script>
jQuery.noConflict();
  function function1() {
   var data = jQuery("#lol").serialize();
   jQuery.ajax({
       url: "index.php",
       data:
       {
option: 'com_ajax',
module: 'auction',
method:'get',
format: 'json',
   },
       success: function(data){
           alert(data);
       }
   });
};
</script>
Записан
Septdir
Практически профи
*******

Репутация: +98/-3
Offline Offline

Пол: Мужской
Сообщений: 1988


Skype: septdir


« Ответ #5 : 11.06.2017, 22:00:37 »

В default.php я получить переменную и записать в базу. Но у меня ругается консоль на url запроса...
Это в хелпере делайте потом уже возвращаете результат.
Вот в статье все хорошо расписанно. Разве что про название класса  хелпера не написалаи
https://cmscafe.ru/docs/joomla/developer/module-joomla-2-5-joomla-3/616-ajax-funktsionalnost-s-pomoshchyu-ajax-interfejsa-com-ajax
Записан
passer
Живу я здесь
******

Репутация: +73/-3
Offline Offline

Пол: Мужской
Сообщений: 947



« Ответ #6 : 11.06.2017, 22:08:18 »

var data = jQuery("#lol").serialize();
Догадайтесь с трех раз, что на сервер уходит.
Пардон, не увидел что ниже переопределяется.
Записан
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #7 : 11.06.2017, 22:10:11 »

var data = jQuery("#lol").serialize();
Догадайтесь с трех раз, что на сервер уходит.

данные из формы #lol
Записан
Septdir
Практически профи
*******

Репутация: +98/-3
Offline Offline

Пол: Мужской
Сообщений: 1988


Skype: septdir


« Ответ #8 : 11.06.2017, 22:15:13 »

SerializeArray
Записан
passer
Живу я здесь
******

Репутация: +73/-3
Offline Offline

Пол: Мужской
Сообщений: 947



« Ответ #9 : 11.06.2017, 22:26:29 »

данные из формы #lol
Уверены?
data:
        {
option: 'com_ajax',
module: 'auction',
method:'get',
format: 'json',
    }
А где форма #lol?
Записан
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #10 : 11.06.2017, 22:30:45 »

Уверены?
data:
        {
option: 'com_ajax',
module: 'auction',
method:'get',
format: 'json',
    }
А где форма #lol?

Вот поправил. Выводится {"success":true,"message":null,"messages":null,"data":null}
data null, хотя я в нее передал данные
Код
<div id="status">Вывод</div>
 
<form method="POST" id="lol" action="javascript:void(null);" onsubmit="function1()">
   <input name="price" type="text" value="" class="text_area">
      </br>
      <input type="submit" name="submit" value="Поставить" class="button_auc">
</form>
<script>
jQuery.noConflict();
  function function1() {
   var form = jQuery("#lol").serializeArray();
   jQuery.ajax({
       type: 'POST',
       url: "index.php",
       dataType:'json',
       data:
       {
option: 'com_ajax',
module: 'auction',
format: 'json',
data: form
   },
 
       success: function(data, status){
       document.getElementById('status').innerHTML=JSON.stringify(data);
       },
       error: function(data,status){
 
       }
   });
};
</script>
Записан
passer
Живу я здесь
******

Репутация: +73/-3
Offline Offline

Пол: Мужской
Сообщений: 947



« Ответ #11 : 11.06.2017, 22:35:35 »

А в getAjax допишите
return ['result'=>'Уряяяяя'];
Записан
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #12 : 11.06.2017, 22:43:24 »

А в getAjax допишите
return ['result'=>'Уряяяяя'];

Сори за тупость) Но у меня так и выводится в data 'result'=>'Уряяяяя' . А не данные формы))
Записан
passer
Живу я здесь
******

Репутация: +73/-3
Offline Offline

Пол: Мужской
Сообщений: 947



« Ответ #13 : 11.06.2017, 22:45:05 »

return ['form'=>$_POST];
Записан
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #14 : 11.06.2017, 22:56:31 »

return ['form'=>$_POST];

Спасибо! Я получил массив в массиве {"forma":{"option":"com_ajax","module":"auction","format":"json","forma":[{"name":"price","value":"я это ввел"}]}}}
Пробую достать value. return ['forma'=>$_POST['value']], но выходит нул. Буду очень благодарен
Записан
passer
Живу я здесь
******

Репутация: +73/-3
Offline Offline

Пол: Мужской
Сообщений: 947



« Ответ #15 : 11.06.2017, 23:14:04 »

Ладно. Спать пора. В общем.
Не стоит использовать $_POST напрямую без проверки входящих данных. Можно что нибудь нехорошее получить.
В getAjax обьект $input вы уже получили.
Теперь получаете данные формы.
Код
$price = $input->getArray([
'price'=>'float'
]);
return ['price'=>$price['price']+140.54];
 
В js-е
Код
success: function(data, status){ 
console.log(data);
       document.getElementById('status').innerHTML=data.price;
       },
Код пишу прямо в форме быстрого ответа возможны ошибки.
В поле ввода должна быть цифра.
Отладка.
Чтобы увидеть что получил в getAjax
Пишешь в нем
Код
var_dump($price); die();
В js получаешь
Код
success: function(data, status){ 
console.log(data);        
       },
И в консоли смотришь что пришло.
« Последнее редактирование: 11.06.2017, 23:19:03 от passer » Записан
Septdir
Практически профи
*******

Репутация: +98/-3
Offline Offline

Пол: Мужской
Сообщений: 1988


Skype: septdir


« Ответ #16 : 11.06.2017, 23:24:46 »

Сделаю две приписки.
1. есть $app->input->post->getAray
2. В браузере есть вкладка сеть. Там можно посмотреть что пришло и что ушло. А так же ошибки. можно даже не делать conlose.log (ибо если там ошибка php то придет не json) просто сдеаать var_dump или print_r
« Последнее редактирование: 12.06.2017, 00:54:25 от Septdir » Записан
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #17 : 11.06.2017, 23:28:34 »

Ладно. Спать пора. В общем.
Не стоит использовать $_POST напрямую без проверки входящих данных. Можно что нибудь нехорошее получить.
В getAjax обьект $input вы уже получили.
Теперь получаете данные формы.
Код
$price = $input->getArray([
'price'=>'float'
]);
return ['price'=>$price['price']+140.54];
 
В js-е
Код
success: function(data, status){ 
console.log(data);
       document.getElementById('status').innerHTML=data.price;
       },
Код пишу прямо в форме быстрого ответа возможны ошибки.
В поле ввода должна быть цифра.
Отладка.
Чтобы увидеть что получил в getAjax
Пишешь в нем
Код
var_dump($price); die();
В js получаешь
Код
success: function(data, status){ 
console.log(data);        
       },
И в консоли смотришь что пришло.

Все сделал, выдает просто undefined. И почему float? Это что вообще?
Записан
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #18 : 11.06.2017, 23:33:46 »

Ладно. Спать пора. В общем.
Не стоит использовать $_POST напрямую без проверки входящих данных. Можно что нибудь нехорошее получить.
В getAjax обьект $input вы уже получили.
Теперь получаете данные формы.
Код
$price = $input->getArray([
'price'=>'float'
]);
return ['price'=>$price['price']+140.54];
 
В js-е
Код
success: function(data, status){ 
console.log(data);
       document.getElementById('status').innerHTML=data.price;
       },
Код пишу прямо в форме быстрого ответа возможны ошибки.
В поле ввода должна быть цифра.
Отладка.
Чтобы увидеть что получил в getAjax
Пишешь в нем
Код
var_dump($price); die();
В js получаешь
Код
success: function(data, status){ 
console.log(data);        
       },
И в консоли смотришь что пришло.

В консоли http://imgur.com/xCL7zfT   почему то у value значение null
Записан
passer
Живу я здесь
******

Репутация: +73/-3
Offline Offline

Пол: Мужской
Сообщений: 947



« Ответ #19 : 11.06.2017, 23:38:22 »

Ну видимо как сказал Septdir надо
Код
price = $input->post->getArray([
var_dump($price); die();
Что возвращает?
Основы отладки вам дали. Отладку придется делать самостоятельно.
Кто ж за вас ее делать будет. Если данные не приходят, значит где то теряются. Ошибка. Ищите где.
Как искать вам рассказали.
Записан
Septdir
Практически профи
*******

Репутация: +98/-3
Offline Offline

Пол: Мужской
Сообщений: 1988


Skype: septdir


« Ответ #20 : 11.06.2017, 23:41:49 »

Ошибки php на максимум. и во вкладку сеть, смотрите что ушло. Либо давайте сайт если время будет кто нибудь глянет. Еще не плохо бы законсолить данные до отправки.
Первый AJAX он трудный самый, потом как по маслу пойдет.
кроме того сделайте так
print_r($input->post) это весь пость
Ну и конечно же дока по jimput https://docs.joomla.org/Retrieving_request_data_using_JInput и еще, получение параметров в пример и вас в коде не верное. так вы получиле паметр по типу или позиции модуля, а вам надо конкретного модуля по id.
« Последнее редактирование: 11.06.2017, 23:49:31 от Septdir » Записан
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #21 : 12.06.2017, 00:39:40 »

Ошибки php на максимум. и во вкладку сеть, смотрите что ушло. Либо давайте сайт если время будет кто нибудь глянет. Еще не плохо бы законсолить данные до отправки.
Первый AJAX он трудный самый, потом как по маслу пойдет.
кроме того сделайте так
print_r($input->post) это весь пость
Ну и конечно же дока по jimput https://docs.joomla.org/Retrieving_request_data_using_JInput и еще, получение параметров в пример и вас в коде не верное. так вы получиле паметр по типу или позиции модуля, а вам надо конкретного модуля по id.

и я не могу делать дамп или принт в getAjax. Если вставляю что-то из этого, скрипт просто не запускается. Жму на кнопку а результата  ноль
Записан
Septdir
Практически профи
*******

Репутация: +98/-3
Offline Offline

Пол: Мужской
Сообщений: 1988


Skype: septdir


« Ответ #22 : 12.06.2017, 00:55:49 »

и я не могу делать дамп или принт в getAjax. Если вставляю что-то из этого, скрипт просто не запускается. Жму на кнопку а результата  ноль

Такого не бывает. Что в запросе.
Записан
dmitry_stas
Профи
********

Репутация: +926/-6
Offline Offline

Сообщений: 9793



« Ответ #23 : 12.06.2017, 01:46:37 »

судя по тому json который вы показываете "я это ввел" лежит в
Код:
$_POST['forma'][0]['value']
Записан
passer
Живу я здесь
******

Репутация: +73/-3
Offline Offline

Пол: Мужской
Сообщений: 947



« Ответ #24 : 12.06.2017, 10:45:34 »

и я не могу делать дамп или принт в getAjax. Если вставляю что-то из этого, скрипт просто не запускается. Жму на кнопку а результата  ноль
Он и не должен запускаться. die() обрывает выполнение скрипта. Результат в консоли js нужно смотреть.
Записан
ChervonStudio
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #25 : 12.06.2017, 11:42:33 »

Он и не должен запускаться. die() обрывает выполнение скрипта. Результат в консоли js нужно смотреть.
Если я вставляю echo, скрипт тоже не работает.
вот код
Код
<?php
 
// No direct access
defined( '_JEXEC' ) or die;
 
/**
* Class Module Helper
* @author Alex Chervon
*/

class modAuctionHelper
{
 
 
/**
* getData method
* @param $params
* @return array
*/

static function getData( $params )
{
$db = JFactory::getDbo();
return array();
}
 
   public static function getAjax()
{
jimport('joomla.application.module.helper');
$input  = JFactory::getApplication()->input;
$module = JModuleHelper::getModule('auction');
       $price = $_POST['forma'][0]['value'];
     echo $price;    
      return true;
 
 
 
 
}
}
 
 
 
 
 
?>
 
 
Записан
dmitry_stas
Профи
********

Репутация: +926/-6
Offline Offline

Сообщений: 9793



« Ответ #26 : 12.06.2017, 14:58:31 »

он работает, просто ответ получается не json, и ваш javascript вываливается с ошибкой. ловите исключения в error, либо просто смотрите в консоли ответ. а лучше просто делайте return, а не echo
Записан
ProtectYourSite
Завсегдатай
*****

Репутация: +46/-4
Offline Offline

Сообщений: 787



« Ответ #27 : 12.06.2017, 19:09:24 »

Код:
$response=JFactory::getApplication()->input->getString('form');
И обрабатываешь как душе угодно данные формы
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet