Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.10.2012, 12:00
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 569

Обработка формы ajax'ом
Нужно собрать данные с формы и отправить на сервер.
На форме могут быть динамические структуры типа такой: https://github.com/tamtakoe/livelist (вынес модуль, по которому терроризировал форум последние две недели на гит, пользуйтесь :-)

Писать для каждой формы свой обработчик думается неправильным. Есть древнющий плагин jQuery Form, но он тоже не все может. Как такие задачи решаются на сегодняшний день?
Ответить с цитированием
  #2 (permalink)  
Старый 29.10.2012, 18:10
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

не похоже что твой плагин, может заменить form,
но ход мысли мне нравится.

Кстатии у нас тут есть ваши сайты и скрипты
там твой топик был бы уместнее.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Ответить с цитированием
  #3 (permalink)  
Старый 29.10.2012, 18:20
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 569

Опубликую сейчас там. Но мой плагин и не заменяет форму. Просто на примере показал, какие могут быть данные для отправки на сервер.
Например, есть форма с контактой информацией, где используется мой плагин + имя и фамилия, есть так же другая форма написания отзыва, например, еще форма с указанием списка прочитанных книг и т.д.

Можно собирать с них информацию, вешая на каждую кнопку сабмита уникальный скрипт, передающий всё в JSON.

Можно написать универсальный скрипт, передающий на сервер данные всех полей в JSON. Тогда все формы должны быть как-то стандартизированы. Как? Существуют ли готовые решения?

Можно записывать все динамические данные JSON-строкой в невидимое текстовое поле и передавать на сервер

Собственно, хочется знать, как лучше поступить. Как делают профессионалы?
Ответить с цитированием
  #4 (permalink)  
Старый 29.10.2012, 19:21
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 569

Еще немного уточню. Уверен, каждый не раз решал такую задачу!

У нас есть сайт. Половина данных с него отсылается обычным сабмитом, половина через аякс, в формы добавляются новые поля, которые приходится добавлять по всему движку и в БД, доля аякса растет, он вплетается в формы и уже становится неудобно отсылать разными способами. Появляется необходимость делать все единообразно.

Мы запрещаем отправку по сабмиту, находим каждое поле и передаем Аяксом:
$.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

В форме могут быть чекбоксы, радиобаттоны и т.п., их тоже надо обработать.
После отправки делаем редирект куда нам нужно.

Не верю, что никто не сталкивался с такой проблемой и не нашел или написал для себя код, который проглатывает формы
Ответить с цитированием
  #5 (permalink)  
Старый 29.10.2012, 20:04
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Необязательно проходить циклом все элементы формы, в jQuery есть метод .serialize(), который собирает все данные (с некоторыми исключениями) из формы в строку.

Если в форме присутствуют инпуты type="file", то можно отправлять форму в скрытый iFrame.
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #6 (permalink)  
Старый 29.10.2012, 20:59
Аватар для Serg_pnz
Сам по себе
Отправить личное сообщение для Serg_pnz Посмотреть профиль Найти все сообщения от Serg_pnz
 
Регистрация: 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: ...
Ответить с цитированием
  #7 (permalink)  
Старый 29.10.2012, 21:18
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 569

Отлично! То что надо! А атрибут action надо в форме прописывать или лучше редиректить скриптом?
Ответить с цитированием
  #8 (permalink)  
Старый 31.10.2012, 21:18
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 569

Кстати, есть ли смысл делать кнопку сабмита, чтобы, в случае, если у пользователя нет ява-скрипта, по ней бы отправлялась форма по-старинке? Работы и костылей получится много, особенно, если в форме динамически-добавляемые поля, а толку? Сколько людей скажут спасибо, кто-то располагает статистикой поддержки ява-скрипта? В инете ничего актуального не нашел...
Ответить с цитированием
  #9 (permalink)  
Старый 31.10.2012, 21:26
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Shitbox2,
Не надо ничего делать. Нет JS, значит ваши проблемы. По факту, таких людей очень мало. Если вытащить процессор с вашего компа, тоже работать не будет.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #10 (permalink)  
Старый 31.10.2012, 21:47
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 569

Не будем тогда) Кстати, где-нибудь можно посмотреть актуальную статистику, по которой можно узнать какой процент пользователей какие браузерные технологии поддерживает? Чтобы не ломать голову, если проблема затронет всего 10% людей
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка формы и вывод на стороне браузера средствами DHTML redjetfire Events/DOM/Window 5 21.06.2012 10:08
Обработка массива элементов формы и сохранение Viper jQuery 0 19.01.2012 14:04
Пересылка данных из формы в скрипт и их обработка Eugene Общие вопросы Javascript 27 01.10.2010 18:29
Обработка поля формы по событию checked windeamon Я не знаю javascript 12 20.05.2009 14:18
Обработка данных из формы в новом окошке diktator Events/DOM/Window 1 20.10.2008 11:51