BotaniQ_Q
@BotaniQ_Q

Проблема с ajax в Django?

Есть форма
<form class="f-basket" action="{% url 'add_basket' %}">{% csrf_token %} 
	
	Сколько?
	<input type="number" class="number">

	<button  type="submit"  class="submit_btn" data-text = "Здесь просто текст">Отправить</button>


</form>


Есть jquery код
$(document).ready(function(){
        var form = $('.f-basket');
        form.on('submit', function(preventdefault){
        preventdefault.preventDefault();
        var submit_btn = $('.submit_btn');
        var text = submit_btn.data("text")
        var nmb = $('.number').val();
        console.log(text, nmb)




        var data = [];
        data.text = text
        data.nmb = nmb;


        var csrf_token = $('.f-basket [name="csrfmiddlewaretoken"]').val();
        data["csrfmiddlewaretoken"] = csrf_token;

        var url = form.attr("action");

        console.log(url)


        console.log(data)

        $.ajax({
             url: url,
             type: 'POST',
             data: data,
             cache: true,
             success: function () {
                 console.log("OK");

             },
             error: function(){
                 console.log("error");
             }
         })

        
        $('.basket-container ul').append('<li>'+text+ ' в количестве '+ nmb + 
            '<a class="delete-item" href="#">x</a>'+ '</li>');


     });

    $(document).on('click', '.delete-item', function(preventdefault){
         preventdefault.preventDefault();
         $(this).closest('li').remove();
     })

    

    });


И есть представление
def add_basket(request):
	return_dict = dict()
	session_key = request.session.session_key
	if not session_key:
		request.session.cycle_key()

	

	print(request.POST)

	return JsonResponse(return_dict)


В консоли браузера выводятся все дата, однако показывает что сервер не обрабатывает запрос и в браузере выбивает error, в консоли django пишет что csrf токен потерян или не правильный, однако в браузере вместе с другими данными токен тоже выдается, в чем тут проблема?
  • Вопрос задан
  • 521 просмотр
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
В документации есть целый раздел про это.
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы