Обработка формы ajax'ом
Нужно собрать данные с формы и отправить на сервер.
На форме могут быть динамические структуры типа такой: https://github.com/tamtakoe/livelist (вынес модуль, по которому терроризировал форум последние две недели на гит, пользуйтесь :-) Писать для каждой формы свой обработчик думается неправильным. Есть древнющий плагин jQuery Form, но он тоже не все может. Как такие задачи решаются на сегодняшний день? |
не похоже что твой плагин, может заменить form,
но ход мысли мне нравится. Кстатии у нас тут есть ваши сайты и скрипты там твой топик был бы уместнее. |
Опубликую сейчас там. Но мой плагин и не заменяет форму. Просто на примере показал, какие могут быть данные для отправки на сервер.
Например, есть форма с контактой информацией, где используется мой плагин + имя и фамилия, есть так же другая форма написания отзыва, например, еще форма с указанием списка прочитанных книг и т.д. Можно собирать с них информацию, вешая на каждую кнопку сабмита уникальный скрипт, передающий всё в JSON. Можно написать универсальный скрипт, передающий на сервер данные всех полей в JSON. Тогда все формы должны быть как-то стандартизированы. Как? Существуют ли готовые решения? Можно записывать все динамические данные JSON-строкой в невидимое текстовое поле и передавать на сервер Собственно, хочется знать, как лучше поступить. Как делают профессионалы? |
Еще немного уточню. Уверен, каждый не раз решал такую задачу!
У нас есть сайт. Половина данных с него отсылается обычным сабмитом, половина через аякс, в формы добавляются новые поля, которые приходится добавлять по всему движку и в БД, доля аякса растет, он вплетается в формы и уже становится неудобно отсылать разными способами. Появляется необходимость делать все единообразно. Мы запрещаем отправку по сабмиту, находим каждое поле и передаем Аяксом: $.ajax({ ... 'data': { 'login': $('[name:"login"]').val() ... } .... } Вписывать ручками имя каждого поля задалбывает, поэтому мы автоматизируем: var data = [] $form.find('input[name]').each(function(e) { var $item = $(e.target) data.push($item.attr('name')+':'+$item.val()) }) ... 'data': data В форме могут быть чекбоксы, радиобаттоны и т.п., их тоже надо обработать. После отправки делаем редирект куда нам нужно. Не верю, что никто не сталкивался с такой проблемой и не нашел или написал для себя код, который проглатывает формы |
Необязательно проходить циклом все элементы формы, в jQuery есть метод .serialize(), который собирает все данные (с некоторыми исключениями) из формы в строку.
Если в форме присутствуют инпуты type="file", то можно отправлять форму в скрытый iFrame. |
Врать не буду - у кого-то подсмотрел.
Сюжет в следующем: собрать данные с формы, добавить еще что-то, кроме полей формы, отправить всё одним запросом. //готовимся var json = {} //серилизуем данные $.map($('#form').serializeArray(), function(n, i){ json[n['name']] = n['value']; }); //добавляем, если надо еще что-то, какие угодно флаги //не обязательно значения полей $.extend(json, {'op':$('#flag').attr('rel')}); //отправляем $.ajax({ url: 'test.php', data: json, //имя для массива, кончечно не ати type: 'post', success: ... |
Отлично! То что надо! А атрибут action надо в форме прописывать или лучше редиректить скриптом?
|
Кстати, есть ли смысл делать кнопку сабмита, чтобы, в случае, если у пользователя нет ява-скрипта, по ней бы отправлялась форма по-старинке? Работы и костылей получится много, особенно, если в форме динамически-добавляемые поля, а толку? Сколько людей скажут спасибо, кто-то располагает статистикой поддержки ява-скрипта? В инете ничего актуального не нашел...
|
Shitbox2,
Не надо ничего делать. Нет JS, значит ваши проблемы. По факту, таких людей очень мало. Если вытащить процессор с вашего компа, тоже работать не будет. |
Не будем тогда) Кстати, где-нибудь можно посмотреть актуальную статистику, по которой можно узнать какой процент пользователей какие браузерные технологии поддерживает? Чтобы не ломать голову, если проблема затронет всего 10% людей
|
Часовой пояс GMT +3, время: 12:57. |