Как убрать квадратные скобки в конце имени переменной JS во время вызовов AJAX? - PullRequest
16 голосов
/ 16 июля 2010

В настоящее время у меня есть следующий массив javascript:

var stuffs = ['a', 'b'];

Я передаю вышеприведенный код на сервер, используя jQuery's load:

var data = {
    'stuffs': stuffs
};

$(".output").load("/my-server-code/", data, function() {
});

На стороне сервера, если я печатаю содержимое request.POST (в настоящее время я использую Django), я получаю:

'stuffs[]': [u'a', u'b']

Обратите внимание на [] в префиксе имени переменной stuffs. Есть ли способ удалить это [] до того, как оно достигнет кода сервера?

Ответы [ 3 ]

33 голосов
/ 16 июля 2010

Это поведение по умолчанию в jQuery 1.4 + ... если вы хотите, чтобы сообщение было &stuffs=a&stuffs=b вместо &stuffs[]=a&stuffs[]=b, вам следует установить для параметра traditional значениеtrue, вот так:

$.ajaxSetup({traditional: true});

Обратите внимание, что это влияет на все запросы ... как правило, это то, что вы хотите в этом случае.Если вы хотите, чтобы он был на запрос , вам следует использовать более длинный $.ajax() вызов и установить traditional: true там. Более подробную информацию о traditional можно найти в документации $.param() .

0 голосов
/ 16 июля 2010

Когда массив отправляется с использованием запроса GET, через форму или AJAX, каждому элементу присваивается имя массива, за которым следует пара необязательных пустых квадратных скобок.Таким образом, jQuery генерирует URL http://example.com/get.php?stuff[]=a&stuff[]=b.Это единственный способ отправки массива, и javascript следует стандарту.

POST запросы работают точно так же (если только json не отправляется как одна длинная строка json).

В PHP это анализируется обратно в исходный массив, поэтому, хотя строка запроса может быть немного странной, данные получаются в том виде, как они были отправлены.$_GET['stuff'][0] правильно работает в PHP.

Я не уверен, как Django анализирует строки запроса.

0 голосов
/ 16 июля 2010

[] указывает, что переменная является массивом. Я полагаю, что добавление [] к имени вашей переменной - это способ Python / Django сказать вам, что это массив. Возможно, вы могли бы реализовать свою собственную функцию печати, которая не показывает их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...