【问题标题】:Can't respond to AJAX call on context processor无法响应上下文处理器上的 AJAX 调用
【发布时间】:2021-11-24 00:28:46
【问题描述】:

我正在 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 请求并且响应没有问题,但这是我在上下文处理器中处理的唯一一个,所以我确定我缺少一些东西。

谢谢!

【问题讨论】:

标签: javascript python django ajax web


【解决方案1】:

我最终在帮助下想通了。

上下文处理器通常只能用于模板上下文或模板渲染,因此响应应该是字典,而不是 json 类型(这就是错误的原因)。

我为这个 AJAX 请求创建了一个独立的视图,并在 AJAX 的前端指定了这个视图的 URL 以及它的工作方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2011-06-23
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多