无法响应上下文处理器上的 AJAX 调用

Posted

技术标签:

【中文标题】无法响应上下文处理器上的 AJAX 调用【英文标题】:Can't respond to AJAX call on context processor 【发布时间】: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 请求并且响应没有问题,但这是我在上下文处理器中处理的唯一一个,所以我确定我缺少一些东西。

谢谢!

【问题讨论】:

显示请求处理的完整代码。 阅读***.com/help/minimal-reproducible-example。 应更新问题以包含所需行为、特定问题或错误以及重现问题所需的最短代码。 【参考方案1】:

我最终在帮助下想通了。

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

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

【讨论】:

以上是关于无法响应上下文处理器上的 AJAX 调用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 自动将事件处理程序注册到通过 Ajax 响应添加到 DOM 的元素上的用户操作

ajax处理响应

尝试处理 /view/ajax 时出错:无法读取未定义的属性“长度”

进行ajax调用时如何正确处理链接上的href值?

JSONDecoder 无法处理空响应

信号中断和上下文