Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Отправка по Ajax массива значений поля input (https://javascript.ru/forum/jquery/43528-otpravka-po-ajax-massiva-znachenijj-polya-input.html)

hrundel 09.12.2013 15:23

Отправка по 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. Что нужно сделать, чтобы на сервер пришёл массив выбранных значений?

Tek 09.12.2013 15:39

Отправляйте на сервер json
myJsonString = JSON.stringify(yourArray);

hrundel 09.12.2013 15:51

Цитата:

Сообщение от Tek (Сообщение 285612)
Отправляйте на сервер json
myJsonString = JSON.stringify(yourArray);

А как это можно реализовать в отношении моей проблемы? Я думаю, что разобрать переменную item на части все равно придётся даже в случае отправки на сервер json-запроса.

Tek 09.12.2013 16:02

Как то так,http://jsfiddle.net/mx5S8/

hrundel 09.12.2013 16:26

Цитата:

Сообщение от Tek (Сообщение 285620)
Как то так,http://jsfiddle.net/mx5S8/

У меня в функцию передаётся название поля (без квадратных скобок). В примере, который вы мне дали, у вас селектор $("input"), а у меня есть только название поля (name). Поэтому в селекторе я должен указать что-то такое: $("input[name=name]"). А если я так сделаю, то получается вот что: http://jsfiddle.net/mx5S8/2/

danik.js 09.12.2013 23:29

Цитата:

Сообщение от hrundel
sendForma

Че уж там, пиши сразу sendФорму() :haha:

danik.js 09.12.2013 23:31

var items = $('input[name="'+itemName+'[]"]');
$.ajax({
        data: items.serialize(),
)};

hrundel 10.12.2013 14:20

Цитата:

Сообщение от danik.js (Сообщение 285758)
items.serialize()

Не работает. Работает только для простых полей, имя которых не содержит квадратных скобок.

hrundel 10.12.2013 14:23

Я думаю что проблема в том, что $('input[name="'+itemName+'[]"]') возвращает не массив и не строку, а некий объект. Вот только как с этим объектом работать?

danik.js 10.12.2013 21:26

Цитата:

Сообщение от hrundel
Не работает. Работает только для простых полей, имя которых не содержит квадратных скобок.

Должно работать. Ошибка видимо в другом. Версию jQuery на всякий случай скажи.
Цитата:

Сообщение от hrundel
возвращает не массив и не строку, а некий объект

Ага. Массивоподобный объект. Можно ручками пройтись по нему через $.map() например или через for цикл и получить массив значений. Далее в data передаем объект:
var data = {};
data[itemName + "[]"] = values;


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


Часовой пояс GMT +3, время: 05:29.