Как удалить квадратные скобки в конце имени переменной JS во время вызовов AJAX?

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

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

Я передаю выше код сервера с помощью jQuery load:

var data = {
    'stuffs': stuffs
};

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

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

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

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

Ответы

Ответ 1

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

$.ajaxSetup({traditional: true});

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

Ответ 2

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

Запросы

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

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

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

Ответ 3

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