29.10.2012, 14:00
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Обработка формы ajax'ом
Нужно собрать данные с формы и отправить на сервер.
На форме могут быть динамические структуры типа такой: https://github.com/tamtakoe/livelist (вынес модуль, по которому терроризировал форум последние две недели на гит, пользуйтесь :-)
Писать для каждой формы свой обработчик думается неправильным. Есть древнющий плагин jQuery Form, но он тоже не все может. Как такие задачи решаются на сегодняшний день?
|
|
29.10.2012, 20:10
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
не похоже что твой плагин, может заменить form,
но ход мысли мне нравится.
Кстатии у нас тут есть ваши сайты и скрипты
там твой топик был бы уместнее.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
|
|
29.10.2012, 20:20
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Опубликую сейчас там. Но мой плагин и не заменяет форму. Просто на примере показал, какие могут быть данные для отправки на сервер.
Например, есть форма с контактой информацией, где используется мой плагин + имя и фамилия, есть так же другая форма написания отзыва, например, еще форма с указанием списка прочитанных книг и т.д.
Можно собирать с них информацию, вешая на каждую кнопку сабмита уникальный скрипт, передающий всё в JSON.
Можно написать универсальный скрипт, передающий на сервер данные всех полей в JSON. Тогда все формы должны быть как-то стандартизированы. Как? Существуют ли готовые решения?
Можно записывать все динамические данные JSON-строкой в невидимое текстовое поле и передавать на сервер
Собственно, хочется знать, как лучше поступить. Как делают профессионалы?
|
|
29.10.2012, 21:21
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Еще немного уточню. Уверен, каждый не раз решал такую задачу!
У нас есть сайт. Половина данных с него отсылается обычным сабмитом, половина через аякс, в формы добавляются новые поля, которые приходится добавлять по всему движку и в БД, доля аякса растет, он вплетается в формы и уже становится неудобно отсылать разными способами. Появляется необходимость делать все единообразно.
Мы запрещаем отправку по сабмиту, находим каждое поле и передаем Аяксом:
$.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
В форме могут быть чекбоксы, радиобаттоны и т.п., их тоже надо обработать.
После отправки делаем редирект куда нам нужно.
Не верю, что никто не сталкивался с такой проблемой и не нашел или написал для себя код, который проглатывает формы
|
|
29.10.2012, 22:04
|
|
Профессор
|
|
Регистрация: 09.11.2009
Сообщений: 1,101
|
|
Необязательно проходить циклом все элементы формы, в jQuery есть метод .serialize(), который собирает все данные (с некоторыми исключениями) из формы в строку.
Если в форме присутствуют инпуты type="file", то можно отправлять форму в скрытый iFrame.
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
|
|
29.10.2012, 22:59
|
|
Сам по себе
|
|
Регистрация: 09.06.2009
Сообщений: 963
|
|
Врать не буду - у кого-то подсмотрел.
Сюжет в следующем: собрать данные с формы, добавить еще что-то, кроме полей формы, отправить всё одним запросом.
//готовимся
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: ...
|
|
29.10.2012, 23:18
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Отлично! То что надо! А атрибут action надо в форме прописывать или лучше редиректить скриптом?
|
|
31.10.2012, 23:18
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Кстати, есть ли смысл делать кнопку сабмита, чтобы, в случае, если у пользователя нет ява-скрипта, по ней бы отправлялась форма по-старинке? Работы и костылей получится много, особенно, если в форме динамически-добавляемые поля, а толку? Сколько людей скажут спасибо, кто-то располагает статистикой поддержки ява-скрипта? В инете ничего актуального не нашел...
|
|
31.10.2012, 23:26
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
Shitbox2,
Не надо ничего делать. Нет JS, значит ваши проблемы. По факту, таких людей очень мало. Если вытащить процессор с вашего компа, тоже работать не будет.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
31.10.2012, 23:47
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Не будем тогда) Кстати, где-нибудь можно посмотреть актуальную статистику, по которой можно узнать какой процент пользователей какие браузерные технологии поддерживает? Чтобы не ломать голову, если проблема затронет всего 10% людей
|
|
|
|