проблема с квадратными скобками в jQuery Form Data при отправке данных в формате json - PullRequest
18 голосов
/ 16 мая 2011

У меня есть объект

    var dataformdata={"key1":"value1","key2":"value2"};

, затем я добавляю еще несколько значений с тем же ключом (key3), как этот

    dataformdata.key3 = [];
    dataformdata.key3.push("value3");
    dataformdata.key3.push("value4");

Я делаю выше в каждом наклоне.Все это работает, кроме отправки объекта dataformdata через функцию jjuery ajax в консоли браузера. Я вижу, что в ключе есть скобки ...

$.ajax({ type: "POST", url: "/", data: dataformdata, ...

Этото, что я вижу в консоли браузера:

key1:value1
key2:value2
key3%5B%5D:value3
key3%5B%5D:value4

Это должно работать, потому что в документах jQuery.ajax () написано

Объект должен быть парами ключ / значение.Если значение является массивом, jQuery сериализует несколько значений с одним и тем же ключом на основе значения традиционной настройки

Но почему в ключе есть скобки (% 5B% 5D)?

Ответы [ 4 ]

17 голосов
/ 08 января 2014

Вы также можете использовать настройки traditional в вызове ajax http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings

традиционный Тип: Boolean

Установите значение true, если вы хотите использовать традиционный стильсериализации параметров.

например:

$.ajax({
 /*usual stuff */
 traditional: true
})
12 голосов
/ 16 мая 2011

Эта нотация со скобками в ключе была введена в 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

соответственно.

3 голосов
/ 16 мая 2011

Возможно отправить несколько фрагментов данных с одинаковым именем ключа в скрипт. Это можно сделать, добавив квадратные скобки [] в конец имени ключа, чтобы обозначить, что данные следует интерпретировать как массив.

Функция, которая делает это: jQuery.param. Как пример того, как это работает:

$.param({
    data: ['value3', 'value4']
});

data - это массив. Когда он сериализован, он отображается как data%5B%5D=value3&data%5B%5D=value4. Серверный скрипт преобразует это в массив.

2 голосов
/ 16 мая 2011

Это в основном соглашение об именах - я думаю из PHP - которое указывает, что ключ (key3) является многозначным.Это зависит от сервера, чтобы декодировать их осмысленно.

Подробнее: http://api.jquery.com/jQuery.param/

...