Home > Software design >  Can't respond to AJAX call on context processor
Can't respond to AJAX call on context processor

Time:10-07

I'm developing a website on DJANGO and I'm facing a problem:

I have a button in my website that, when triggered, sends an AJAX POST request. Since this button is in multiple places of my website, i've decided to receive the AJAX request on the context processor file of my backend.

This is what the request in the frontend looks like:

$.ajax({
    method: 'POST',
    headers: {'X-CSRFToken': csrftoken},
    data: {
        "requested_item": requested_item
    },
    dataType: "json",
    success: function() {
      // Handle success
    }
  });

And this is what the request handling looks like in the backend:

requested_item = request.POST.get('requested_item')
    if requested_item != None:
      # Handle valid request
      return JsonResponse({'success': True})

The thing is, the return JsonResponse({'success': True}) isn't working, it throws this error:

File "*path*\virtual-env\lib\site-packages\django\template\context.py", line 244, in bind_template
    updates.update(processor(self.request))
ValueError: dictionary update sequence element #0 has length 17; 2 is required

The data arrives without any trouble from the frontend to the backend, but I can't seem to respond.

I'm handling multiple AJAX requests the same way in my backend and responsing without problems, but this is the only one I handle in the context processor, so I'm sure there's something I'm missing.

Thanks!

CodePudding user response:

I eventually, with help, figured it out.

The context processor should only be used for template context or template rendering in general, therefore the response should be a dictionary, not a json type one (that's what the error's about).

I created an independent view for this AJAX request and specified in the frontend side of the AJAX the URL of this view and that way it worked.

  • Related