Ajax post multiple inputs
У меня есть html-поля ввода с именем personals. Я использую [], чтобы иметь несколько входов на одно и то же имя и публиковать их.
До этого я использовал обычную форму отправки. И я получил ее в бэкенде Django с помощью getlist('personal[]')
.
Все работает, как ожидалось.
В качестве информации: коды не являются полными. Показаны только самые важные строки.
Мой html код до
<input type="text" name="personals[]" id="personals[]" placeholder='Email'>
<input type="text" name="personals[]" id="personals[]" placeholder='Phone'>
Мой взгляд до
def build(request):
if request.user.is_authenticated:
if request.method == 'POST':
name = request.POST.get('name')
personals = request.POST.getlist('personals[]')
Теперь я использую Ajax для отправки, не перезагружая страницу.
Он больше не работает с personals[]
, поэтому я изменил его на personals
, только без скобки.
Проблема в том, что personal содержит только первый вход. Но не все остальные.
Важно использовать одно и то же имя ввода (в данном случае personals
), потому что я использую некоторые динамические поля ввода, где пользователи могут добавлять дополнительные поля. Поэтому я не хочу менять имя, например, на personals1
и personals2
.
Мой html-код сейчас
<input type="text" name="personals" id="personals" placeholder='Email'>
<input type="text" name="personals" id="personals" placeholder='Phone'>
Мое мнение сейчас
def build(request):
if request.user.is_authenticated:
if request.method == 'POST':
name = request.POST.get('name')
personals = request.POST.get('personals')
Моя ajax функция
$.ajax({
type: 'POST',
cache: false,
url: "{% url 'creator:build' %}",
data: {
name:$('#name').val(),
personals:$('#personals').val(),
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
})
Ваша проблема, вероятно, в том, что у вас есть несколько значений в 'personals', но вы получаете только одно в вашем представлении, вы должны попробовать использовать request.POST.getlist('personals[]')
.
В качестве более общего момента, вы, похоже, собираете данные электронной почты и телефона в ваших входных данных - ваши входные имена должны быть 'email' и 'phone', и вы можете использовать форму Django для отображения и обработки этих входных данных гораздо проще. Если пользователь может создавать дополнительные поля или формы, то они могут обрабатываться Django формами или наборами форм.
Я нашел решение:
var personals = [];
$('input[name="personals[]"]').each(function() {
personals.push(this.value);
});
Здесь ajax:
$.ajax({
type: 'POST',
cache: false,
url: "{% url 'creator:build' %}",
data: {
name:$('#name').val(),
personals: personals,
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
})
и, наконец, вид:
def build(request):
if request.user.is_authenticated:
if request.method == 'POST':
name = request.POST.get('name')
personals = request.POST.getlist('personals[]')
отправить 2 или более входных данных с одинаковым именем с помощью ajax