Выдать с помощью скобок в jQuery Form Data при отправке данных как json
У меня есть объект
var dataformdata={"key1":"value1","key2":"value2"};
то я добавляю несколько значений с тем же ключом (key3), что и этот
dataformdata.key3 = [];
dataformdata.key3.push("value3");
dataformdata.key3.push("value4");
Я делаю это на каждом склоне. Все это работает, за исключением отправки объекта dataformdata с помощью функции jQuery ajax в консоли браузера. Я вижу, что в ключе находятся скобки...
$.ajax({
type: "POST",
url: "/",
data: dataformdata,
...
Это то, что я вижу в консоли браузера:
key1:value1
key2:value2
key3%5B%5D:value3
key3%5B%5D:value4
Он должен работать, потому что в документах jQuery.ajax() он говорит
Объектом должны быть пары "ключ/значение". Если значением является массив, jQuery сериализует несколько значений одним и тем же ключом на основе значения традиционной настройки
Но почему в ключе скобки (% 5B% 5D)?
Ответы
Ответ 1
Это обозначение с помощью скобок в ключе было введено в jQuery 1.4 для обработки многомерных массивов или массивов, содержащих объекты (или другие массивы). Это помогает десериализатору различать массив и примитивное значение. Например, если у вас не было скобок в ключе, эти две переменные были бы сериализованы одинаково:
var v1 = { "k1":"v1", "k2":"v2", "k3":["v3"] };
и
var v1 = { "k1":"v1", "k2":"v2", "k3":"v3" };
С обозначением скобки они закодированы как
k1=v2&k2=v2&k3[]=v3
и
k1=v2&k2=v2&k3=v3
соответственно.
Ответ 2
вы также можете использовать настройки traditional
в вызове ajax
http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings
традиционный Тип: Логическое
Установите для этого значение значение true, если вы хотите использовать традиционный стиль параметрической сериализации.
например:
$.ajax({
/*usual stuff */
traditional: true
})
Ответ 3
Можно отправить несколько фрагментов данных с одним и тем же именем в script. Вы можете сделать это, добавив квадратные скобки []
в конец имени ключа, чтобы указать, что данные должны интерпретироваться как массив.
Функция, которая делает это, jQuery.param
. В качестве примера того, как это работает:
$.param({
data: ['value3', 'value4']
});
data
- это массив. Когда он сериализуется, он отображается как data%5B%5D=value3&data%5B%5D=value4
. Serveride script преобразует это в массив.
Ответ 4
Это в основном соглашение об именах -— Я думаю, из PHP — что ключ (key3
) является многозначным. Это до сервера, чтобы значительно расшифровать их.
Подробнее: http://api.jquery.com/jQuery.param/