Как удалить квадратные скобки в конце имени переменной 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 сказать вам, что это массив. Возможно, вы можете реализовать свою собственную функцию печати, которая не отображает их.