Ответ 1
Посмотрите документацию jQuery.param()
:
Как и в jQuery 1.4, метод
$.param()
сериализует глубокие объекты рекурсивно для размещения современных языков сценариев и фреймворков, таких как PHP и Ruby on Rails. Вы можете отключить эту функциональность глобально, установивjQuery.ajaxSettings.traditional = true;
.
Учитывая
var p = {foo: [1,2,3], bar: 42};
настройка traditional
- true
генерирует
foo=1&foo=2&foo=3&bar=42
Пока, например, Python может обрабатывать эти параметры, т.е. Генерирует список для foo
, PHP будет рассматривать только последний параметр foo
.
Но теперь по умолчанию результат сериализации (на самом деле это кодирование URI)
foo[]=1&foo[]=2&foo[]=3&bar=42
который может быть лучше обработан, как уже упоминалось, PHP и RoR.
Или, может быть, еще более интересно это. Дано:
var p = {foo: {1: [3,4], 2:2,3:3}, bar: 42};
традиционный производит:
foo=[object Object]&bar=42
что явно не полезно по сравнению с "новым" способом:
foo[1][]=3&foo[1][]=4&foo[2]=2&foo[3]=3&bar=42