Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.12.2013, 17:23
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Отправка по Ajax массива значений поля input
Есть html-форма:
Выберете число:<br>
<input type="checkbox" name="number[]" value="1"> - 1<br>
<input type="checkbox" name="number[]" value="2"> - 2<br>
<input type="checkbox" name="number[]" value="3"> - 3<br>
<br>

Заметьте, что имя указано как 'number[]', т.е. на сервере предполагается получить массив значений.

Если бы имя инпута было указано без квадратных скобок так 'number', то мой код посылки ajax-запроса выглядел бы так:
//itemName - это имя поля, чьё значение(-ия) нужно отправить на сервер. В данном случае оно равно 'number'.
function sendForma(itemName){
	var formaData = new FormData();
	var item = $('input[name='+itemName+']');
	var itemValue = item.val();	
	formaData.append(itemName, itemValue);
	$.ajax({
		data: formaData,
	)};
}


Если код оставить как есть сейчас, и использовать в html-коде название поля 'number[]', то на сервер придёт значение undefiend. Что нужно сделать, чтобы на сервер пришёл массив выбранных значений?
Ответить с цитированием
  #2 (permalink)  
Старый 09.12.2013, 17:39
Аватар для Tek
Tek Tek вне форума
Профессор
Отправить личное сообщение для Tek Посмотреть профиль Найти все сообщения от Tek
 
Регистрация: 22.02.2012
Сообщений: 212

Отправляйте на сервер json
myJsonString = JSON.stringify(yourArray);
Ответить с цитированием
  #3 (permalink)  
Старый 09.12.2013, 17:51
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Сообщение от Tek Посмотреть сообщение
Отправляйте на сервер json
myJsonString = JSON.stringify(yourArray);
А как это можно реализовать в отношении моей проблемы? Я думаю, что разобрать переменную item на части все равно придётся даже в случае отправки на сервер json-запроса.
Ответить с цитированием
  #4 (permalink)  
Старый 09.12.2013, 18:02
Аватар для Tek
Tek Tek вне форума
Профессор
Отправить личное сообщение для Tek Посмотреть профиль Найти все сообщения от Tek
 
Регистрация: 22.02.2012
Сообщений: 212

Как то так,http://jsfiddle.net/mx5S8/
Ответить с цитированием
  #5 (permalink)  
Старый 09.12.2013, 18:26
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Сообщение от Tek Посмотреть сообщение
Как то так,http://jsfiddle.net/mx5S8/
У меня в функцию передаётся название поля (без квадратных скобок). В примере, который вы мне дали, у вас селектор $("input"), а у меня есть только название поля (name). Поэтому в селекторе я должен указать что-то такое: $("input[name=name]"). А если я так сделаю, то получается вот что: http://jsfiddle.net/mx5S8/2/
Ответить с цитированием
  #6 (permalink)  
Старый 10.12.2013, 01:29
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от hrundel
sendForma
Че уж там, пиши сразу sendФорму()
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 10.12.2013, 01:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

var items = $('input[name="'+itemName+'[]"]');
$.ajax({
        data: items.serialize(),
)};
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 10.12.2013, 16:20
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Сообщение от danik.js Посмотреть сообщение
items.serialize()
Не работает. Работает только для простых полей, имя которых не содержит квадратных скобок.
Ответить с цитированием
  #9 (permalink)  
Старый 10.12.2013, 16:23
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Я думаю что проблема в том, что $('input[name="'+itemName+'[]"]') возвращает не массив и не строку, а некий объект. Вот только как с этим объектом работать?
Ответить с цитированием
  #10 (permalink)  
Старый 10.12.2013, 23:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от hrundel
Не работает. Работает только для простых полей, имя которых не содержит квадратных скобок.
Должно работать. Ошибка видимо в другом. Версию jQuery на всякий случай скажи.
Сообщение от hrundel
возвращает не массив и не строку, а некий объект
Ага. Массивоподобный объект. Можно ручками пройтись по нему через $.map() например или через for цикл и получить массив значений. Далее в data передаем объект:
var data = {};
data[itemName + "[]"] = values;


Но это бессмысленно, ибо есть serialize() который уже все это делает, да еще и в строку сериализует сразу.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax и отправка файлов с формы miker059 jQuery 5 10.01.2018 03:12
Книги по Ajax BaVa Учебные материалы 18 18.08.2013 14:05
Ширина поля input text в зависимости от количества символов rekon87 (X)HTML/CSS 7 14.06.2013 22:55
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27
Изменение значений input в форме перед ее отправкой через ajax rustleofstars jQuery 4 26.06.2012 17:40