Невозможно ответить на вызов AJAX на контекстном процессоре
Я разрабатываю сайт на DJANGO и столкнулся с проблемой:
На моем сайте есть кнопка, которая при срабатывании отправляет AJAX POST запрос. Поскольку эта кнопка находится в нескольких местах моего сайта, я решил получать AJAX-запрос в файле контекстного процессора моего бэкенда.
Вот как выглядит запрос во фронтенде:
$.ajax({
method: 'POST',
headers: {'X-CSRFToken': csrftoken},
data: {
"requested_item": requested_item
},
dataType: "json",
success: function() {
// Handle success
}
});
А вот как выглядит обработка запроса в бэкенде:
requested_item = request.POST.get('requested_item')
if requested_item != None:
# Handle valid request
return JsonResponse({'success': True})
Дело в том, что return JsonResponse({'success': True})
не работает, он выбрасывает эту ошибку:
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
Данные поступают без проблем с фронтенда на бэкенд, но я не могу ответить.
Я обрабатываю несколько AJAX-запросов таким же образом в своем бэкенде и отвечаю без проблем, но это единственный запрос, который я обрабатываю в контекстном процессоре, поэтому я уверен, что я что-то упускаю.
Спасибо!
В конце концов, с помощью, я разобрался в этом.
Контекстный процессор должен использоваться только для контекста шаблона или рендеринга шаблона в целом, поэтому ответ должен быть словарем, а не типом json (об этом и говорит ошибка).
Я создал независимое представление для этого AJAX запроса и указал во фронтенд стороне AJAX URL этого представления и таким образом все заработало.