Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.03.2014, 19:10
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Как отправить multiple select на сервер
Всем привет.
Что-то я уже долго голову ломаю, но ничего не получается.
Вобщем пишу функцию. В функцию передается объект формы.
Она должна перебрать все элементы формы и отдать строку, пригодную для отправки на сервер. То есть:
поле=значение&поле=значени
Проблема с select-multiple. Как нужно передать такой селект, если выбрано несколько элементов?
Ответить с цитированием
  #2 (permalink)  
Старый 16.03.2014, 19:12
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

отправьте форму на сервер без javascript и посмотрите в каком формате такой селект придет
Ответить с цитированием
  #3 (permalink)  
Старый 16.03.2014, 19:22
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Octane,
Если имя select указано так: name="field[]"
То на сервере я получу массив $_POST['field']
Где будут все выбранные поля из списка.
Вопрос в том, как сформировать строку для Ajax отправки
Ответить с цитированием
  #4 (permalink)  
Старый 16.03.2014, 19:36
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Пройтись в цикле по select.options, проверяя на наличие атрибута selected, и сформировать строку. Хотя если форма только скриптом отправляется, можно в любом удобном виде отправлять.
Ответить с цитированием
  #5 (permalink)  
Старый 16.03.2014, 19:55
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Разобрался вроде.
Как-то так:
function SerializeForm(form){
	var fields = form.elements;
	var field, name, value, type;
	var res = '';
	for(var z = 0; z < fields.length; z++){
		field = fields[z];
		name = field.name;
		value = field.value;
		type = field.type;
		if(typeof name == "undefined" || name == ""){continue;}
		if(type == 'checkbox' || type == 'radio'){
			if(field.checked){
				res += name +"="+ value +"&"; continue;
			}else{
				continue;
			}
		}
		if(type == "select-multiple"){
			for(var so = 0; so < field.length; so++){
				if(field[so].selected){
					res += name +"="+ field[so].value +"&";
				}
			}
			continue;
		}
		res += name +"="+ value +"&";
	}
	return encodeURIComponent(res);
}

Еще допилить надо
Ответить с цитированием
  #6 (permalink)  
Старый 16.03.2014, 20:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Если не нужна кроссбраузерность, то можно использовать FormData()
Если нужна - то лучше jQuery, там есть $().serialize()
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 16.03.2014, 21:00
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от danik.js
Если нужна - то лучше jQuery, там есть $().serialize()
Знаю, но это тоже вроде работает.
Я не трогаю пока jquery
Ответить с цитированием
  #8 (permalink)  
Старый 16.03.2014, 21:02
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Одно не пойму, как можно эту функцию добавить ко всем формам.
Ну вроде как чтобы можно было писать
var string = form['form_name'].serialize();
Ответить с цитированием
  #9 (permalink)  
Старый 16.03.2014, 21:38
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Hapson
Ну вроде как чтобы можно было писать
Это надо модифицировать прототип HTMLFormElement. Не стоит этого делать. Ну какая тебе разница как писать:
form.serialize() vs serialize(form)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 17.03.2014, 00:45
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от danik.js Посмотреть сообщение
Это надо модифицировать прототип HTMLFormElement. Не стоит этого делать. Ну какая тебе разница как писать:
form.serialize() vs serialize(form)
Ну да, и так нормально
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запрос. Как делать SELECT с условием SELECT Duda.Ml1986@gmail.com Серверные языки и технологии 16 13.01.2014 16:09
Как отправить данные в Form Data вместо Request Payload? Shitbox2 Angular.js 2 26.05.2013 22:40
Как выбрать параметр в select по умолчанию? hurtmind Серверные языки и технологии 0 23.09.2012 23:21
multiple в select MaxB Events/DOM/Window 1 28.08.2009 19:30
Как вывести на экран значение функции SELECT MAX(id) Владдд Серверные языки и технологии 3 25.01.2009 16:07