How to to access Ajax POST request from Javascript in Django

General Tech Bugs & Fixes 2 years ago

0 1 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (1)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

I am sending an Ajax POST request to Django from a Javascript modal. The csrf token is included correctly (after much headache...) but for whatever reason, I cannot 'fetch' the request data in my views.py. I have added some comments in the code to indicate what seems to be working

I have been reading everything I could find on this, but still couldn't find the error so any input would be highly appreciated. Thanks!

Javascript

function getMenuItem(id){
    console.log(id); // menuitem id prints correctly

    // Open request to get menuitem
    const request = new XMLHttpRequest();
    request.open('POST', '/menuitem');

    // Include csrf token in header so Django will accept the request
    const header =  "X-CSRFToken"
    const token = Cookies.get('csrftoken'); // Using the js-cookie library
    console.log(token); // token prints correctly
    request.setRequestHeader(header, token);

    // Send request
    request.send(id);

    //Once request is received parse it and insert result in DOM
    request.onload = () => {
        const received = request.responseText;
        console.log(received); // Prints the debug message from Django
        const parsed = JSON.parse(received);
        document.getElementById('menuItem').innerHTML = parsed;
    };
};

views.py

def menuitem(request):
    if request.method == 'POST':
        id = request.body # I have also tried HttpRequest.body  
        print(id) # Does not print 
        menuitem = MenuConfiguration.objects.filter(id=id).all()
        menuitem = serializers.serialize('json', menuitem)
        menuitem = json.loads(menuitem)

        return menuitem

Traceback

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/utils/deprecation.py", line 93, in __call__
    response = self.process_response(request, response)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/middleware/clickjacking.py", line 

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.