Search code examples
python-3.xdjangoajax

ajax not passing data to view in Django


I am trying to send ajax request but request QueryDict is empty

index.html

var coin = Number(localStorage.getItem("coin"))
            if (coin!=0) {
                debugger
                $.ajax({
                    url:"/",
                    method:"POST",
                    headers:{"X-CSRFToken":$("input[name=csrfmiddlewaretoken]").val()},
                    data:{"coin":coin},
                    contentType:"application/json",
                    success:function(data){
                        console.log(data)
                        localStorage.setItem("coin",0)
                    },
                    error:function(errMsg){
                        console.log(errMsg)
                        localStorage.setItem("coin",0)
                    }
                })
            }

views.py

elif request.method == "POST":
        print(request.POST)
        response = JsonResponse({"a":"b"},status=200)
        return response

cmd

<QueryDict: {}>
[09/Jun/2024 09:36:49] "POST / HTTP/1.1" 200 10

browser console

browser console image

output i expect in cmd

<QueryDict: {"coin":anynumber }>
[09/Jun/2024 09:36:49] "POST / HTTP/1.1" 200 10

Solution

  • These are a few steps you need to consider:

    1. Is the required payload in request.body?
    2. Try sending data with var postData = new FormData() in JavaScript.

    Additionally, ensure that your AJAX request is correctly configured to send data to the Django view. Here is an example of how you might set up your AJAX request:

    $.ajax({
        url: '/your-url/',
        type: 'POST',
        data: postData,
        processData: false,
        contentType: false,
        success: function(response) {
            console.log('Success:', response);
        },
        error: function(error) {
            console.log('Error:', error);
        }
    });
    

    And in your Django view, make sure you are handling the request correctly:

    from django.http import JsonResponse
    
    def your_view(request):
        if request.method == 'POST':
            data = request.POST or request.FILES
            # Process your data here
            return JsonResponse({'message': 'Success'})
        return JsonResponse({'error': 'Invalid request'}, status=400)