Отправка формы без перезагрузки страницы 2.X

Отправка формы через ajax

 
Посетитель
small user social cms
Медаль
Сообщений: 280
Такую отправку я сделал. Получил работающий вариант, но возникли вопросы.
Для примера приведу упрощенный код. Задача - разделить одно число на другое, ответ получить на той же странице.
Контроллер называется division.
system/controllers/division/frontend.php
system/controllers/division/forms/form_division.php
templates/default/controllers/division/index.tpl.php
Вопросы:
1. Как в шаблоне получить id формы? Чтобы не ковырять зачения так: var source = $('#source').val();
2. Почему в JS адрес обработчика формы задаётся фактически экшеном url: 'calc' ?
3. В моём варианте не работает атрибут required в input, что досадно.
Понимаю, что пошел своим путём и можно всё сделать "классически", но как это сделать пока не знаю.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2938
@IamB,
Не понял зачем отправлять калькуляцию в php, если яваскрипт сам хорошо делит и умножает.
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 280
Ris, это упрощённый пример. Вам точно нужно разобраться в простыне на 200 строк? Или только суть?
У меня нет намерения грузить кого-то лишними задачами.
Редактировалось: 1 раз (Последний: 21 января 2020 в 21:45)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2938
@IamB:
только суть
Я понимаю, что какие-либо действия без перезагрузки - это аякс.
Также понимаю, что отправка запросов js-php несколько раз туда-сюда в одной валидации формы не есть хорошо.
Но почему не отправить из php в браузер столько данных, сколько возможно и не работать с этими данными уже в js ?
Посетитель
small user social cms
Медаль
Сообщений: 280
Ris, а можно я сам буду решать как мне работать с данными в каждой конкретной ситуации?
Но в случае с недокалькулятором, то на боевом сайте его, конечно, стоит решить на JS.
Посетитель
small user social cms
Почетный донор проектаМедаль
Сообщений: 328
@IamB:
1. Как в шаблоне получить id формы? Чтобы не ковырять зачения так: var source = $('#source').val();
а причём id формы если в примере
Код PHP:
  1. $('#source').val();
получения значения поля по id ?
в icms2 id формы динамический
Код PHP:
  1. md5(microtime(true))
если не передан атрибут
Код PHP:
  1. $attributes['form_id']
а так как вариант получить объект формы при действии для вложенного через
Код PHP:
  1. var form = $(this).closest("form");
@IamB:
2. Почему в JS адрес обработчика формы задаётся фактически экшеном url: 'calc' ?
наверное потому что action у формы такой? а в ajax url в js перехватчике не определён? или я не понял ситуацию))
@IamB:
3. В моём варианте не работает атрибут required в input, что досадно.
возможно ваша js функция вызывается через click а не submit и если же так, то в коде не присутствует цикла проверки полей с учётом required)
Решаю проблемы на ваших проектах)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2938
@IamB:
Ris, а можно я сам буду решать как мне работать с данными в каждой конкретной ситуации?
Нельзя, конечно же, но что с вами поделать/? smile
Попробуйте посмотреть структуру формы, и найти там id.
$structure = $form->getStructure();
Посетитель
small user social cms
Медаль
Сообщений: 280
ideasdigger:
а причём id формы если в примере получения значения поля по id ?
Чтобы получить значения полей формы так:
Код PHP:
  1. data: $(#id_form).serialize(),
Посетитель
small user social cms
Почетный донор проектаМедаль
Сообщений: 328
@IamB:
Чтобы получить значения полей формы так:
так я выше в ответе всё рассказал))
1 из вариантов модернизировать ваш
Код PHP:
  1. templates/default/controllers/division/index.tpl.php
а именно участок
Код PHP:
  1.  
  2. <?php
  3. $this->renderForm($form, $numbers, [
  4. //"action" => "",
  5. //"method" => "post",
  6. "submit" => ["title" => "Рассчитать", "id" => "calc"]
  7. ], $errors);
  8.  
  9. ?>
  10.  
изменить на
Код PHP:
  1.  
  2. <?php
  3. $this->renderForm($form, $numbers, [
  4. 'form_id' => "id_form",
  5. //"action" => "",
  6. //"method" => "post",
  7. "submit" => ["title" => "Рассчитать", "id" => "calc"]
  8. ], $errors);
  9.  
  10. ?>
  11.  
и у вашей формы будет id не md5 строка а id_form )
Редактировалось: 1 раз (Последний: 21 января 2020 в 22:53)
Решаю проблемы на ваших проектах)
Посетитель
small user social cms
Медаль
Сообщений: 280
Ris:
$structure = $form->getStructure();
Увы! Здесь id формы не увидел.
Посетитель
small user social cms
Медаль
Сообщений: 280
ideasdigger, ваш вариант с id формы сработал. Благодарю!

В результате файл templates/default/controllers/division/index.tpl.php стал таким
Код
И атрибут required в input теперь работает.
Редактировалось: 3 раз (Последний: 22 января 2020 в 14:23)
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.