Django Ajax Request - JSONDecodeError: Ожидание значения
Я работаю над проектом Django, в котором у меня есть система записи на курсы. У меня есть кнопка на HTML-странице, которая при нажатии вызывает Ajax-запрос для отправки данных о зачислении. Кнопка перенаправляет меня на страницу с формой, в которой студент может заполнить такие данные, как имя, фамилия, номер телефона, электронная почта и уровень владения языком.
Однако я столкнулся с проблемой, когда значения из HTML-атрибутов (data-language-id
, data-course-name
, data-price
) не передаются в представление Django. При попытке разобрать тело запроса представление Django возвращает JSONDecodeError: Expecting value
.
Я собираюсь сохранить эти данные в двух таблицах в моей базе данных: Student
и Enrolment
. Любые соображения или предложения о том, как решить эту проблему и успешно сохранить данные в этих таблицах, будут очень признательны. Спасибо!
HTML-код:
<!-- This is the button triggering the Ajax request -->
<div class="block1_1">
<!-- ... other HTML content ... -->
<div class="block__button" onclick="submitData(this)" data-language-id="1"
data-course-name="Стандарт" data-price="6000">
<a href="{% url 'index3' %}">Записатися</a>
</div>
</div>
Код на JavaScript:
function submitData(clickedBlock) {
var languageId = clickedBlock.getAttribute('data-language-id');
var courseName = clickedBlock.getAttribute('data-course-name');
var price = clickedBlock.getAttribute('data-price');
$.ajax({
url: "/index3/",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
language_id: languageId,
name: courseName,
price: price,
}),
success: function(response) {
console.log(response);
window.location.href = '{% url "index3" %}';
},
error: function(xhr, status, error) {
console.error('Error:', error);
alert('Failed to submit data. Please try again.');
}
});
}
Django View (views.py):
def index3(request):
if request.method == "POST":
data = json.loads(request.body.decode("utf-8"))
language_id = data.get("language_id")
course_name = data.get("name")
price = data.get("price")
# Extract form data
name = request.POST.get("student_name")
surname = request.POST.get("student_surname")
phone_number = request.POST.get("phone_number")
email = request.POST.get("email")
language_level = request.POST.get("lang_level")
# Create Student instance and save to the database
student = Student.objects.create(
name=name, surname=surname, phone_number=phone_number, email=email
)
# Find the Course based on the provided parameters
course = Course.objects.get(name=course_name, price=price, level=language_level)
# Create Enrolment instance and link it with Student and Course
enrolment = Enrolment.objects.create(
student=student,
course=course,
language=language_id,
)
return redirect("success_page")
return render(request, "index3.html")