Подтвердить что ты не робот

Выдать с помощью скобок в 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)?

4b9b3361

Ответ 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/