Почему не работает AJAX функция?

У меня есть класс class OrderCreate(CreateView), где я обрабатываю создание экземпляра модели Order. Я хочу, чтобы форма, представленная в этом классе обрабатывалась через AJAX. Ранее я уже работал с AJAX, реализовал корзину, отправки вопросов в администрацию сайта и все работает корректно, однако тут столкнулся с проблемой, что не срабатывает AJAX функция.

Полагаю, что проблема может быть вызвана двумя вещами:

  1. Некорректно работает маршрутизация. Поясню. У меня форма для создания заказа представлена на странице making.html, которая в свою очередь доступна по ссылке /order/order-create/ (ниже я приведу все паттерны). Обрабатываю AJAX запрос я не в классе представлении class OrderCreate(CreateView), а в отдельной функции def check_bonuses(request). Соответственно, возможно, что в AJAX url, который я передаю, некорректно передается. Что я имею в виду:

    urls.py (корневого приложения):

    urlpatterns = [
        path("admin/", admin.site.urls),
        path('', include('main_application.urls')),
        path('users/', include('users.urls')),
        path('cart/', include('cart.urls')),
        path('order/', include('order.urls')),
    ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    

    urls.py (приложения order, где обрабатываются заказы):

    app_name = 'order'
    
    urlpatterns = [
        path('order-pay/', OrderPay.as_view(), name='order-pay'),
        path('order-create/', OrderCreate.as_view(), name='order-create'),
        path('order-create/check-bonuses/', check_bonuses, name='check-bonuses'),
    ]
    

Когда я вручную ввожу путь order/order-create/check-bonuses/, то функция check_bonuses вызывается и работает корректно. Соответственно предполагаю, что ошибка либо в шаблоне в форме, либо я некорректно передаю url AJAX, в результате чего не срабатывает сам AJAX.

making.html:

<form method="POST" id="orderForm">
{% csrf_token %}
    <div class="delivery__row-input">
       <label for="name" class="delivery__label">Списать бонусов:</label> 
       {{ form.current_bonuses }}
    </div>
    <input class="button delivery__button" type="submit" value="ПЕРЕЙТИ К ОПЛАТЕ">
</form>

Тут у меня у формы есть уникальный идентификатор, который передается в событие JQUERY.

ajax.js:

$(function() {
    $('#orderForm').on('submit', function(e){ 
        e.preventDefault();
        let input_data = $('#bonuses_formID').val()
        $.ajax({
            url: 'order/order-create/check-bonuses/',
            type: 'POST',
            data: {
                input_data: input_data,
                csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
            },
            success: function (response) {
                if (response.success) {
                    $('#bonuses_formID').addClass('promocode_ok');
                } else {
                    $('#bonuses_formID').addClass('promocode_error');
                }
            },
            error: function(xhr, errmsg, err) {
                console.log(xhr.status + ": " + xhr.responseText);
            }
        });
    });
});

views.py:

def check_bonuses(request):
    print(f"\nAjax function!\n")
    if request.method == 'POST':
        profile = Profile.objects.get(user=request.user.id)
        current_bonuses = int(profile.current_bonuses)

        input_bonuses = int(request.POST.get('input_data'))

        if input_bonuses > current_bonuses:
            return JsonResponse({'success': False, 'message': 'Число запрошенных бонусов больше текущих!'})
        else:
            return JsonResponse({'success': True})
    else:
        return HttpResponse()

Испробовал все, не могу никак докопаться, в чем ошибка и почему не работает AJAX при отправке формы? e.preventDefault() просто не срабатывает, страница перезагружается, в терминале высвечивается это:

"GET /order/order-create/?delivery=moscow&way=usual&csrfmiddlewaretoken=hX7mZs8TYZsZrgwTgHml79eAM0HUva5TouMRQoNb999EMx7eLkxfeygcdpPR3I50&city=%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&index=105523&street=15-%D1%8F+%D0%BF%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F&corp=1&house=54&room=52&shipment_date=14.02.2024&promo=&current_bonuses= HTTP/1.1" 200 30704

но, вместе с тем методы form_valid() и form_invalid() также не вызываются. Не могу разобраться, в чем проблема.

Вернуться на верх