javascript - Django Ajax 通信,Django 不识别为 Ajax(使用 request.is_ajax() )
问题描述
我在 Django 中使用 Ajax。数据被进一步传输,但不被识别为 Ajax。浏览器 Chrome/Firefox;
要检查请求是否通过 ajax 完成,我使用:
`request.is_ajax()` method, but this fails, not true, so I checked this method how is working and:
def is_ajax(self):
return self.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
我验证了 META.get('HTTP_X_REQUESTED_WITH')
,我得到了None
;
我认为是 ContentType 或者我需要设置另一个标题。但是如何?我的 JavaScript 是这样设置的:
xhr.open('post', event.target.action, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("HTTP_X_REQUESTED_WITH", "XMLHttpRequest");
xhr.send(data));
进一步检查似乎 request.Meta 也不包含 Content-type 。
解决方案
从官方文档:
除了上面给出的 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 标头都通过将所有字符转换为大写、用下划线替换任何连字符并在名称中添加 HTTP_ 前缀来转换为 META 键。因此,例如,名为 X-Bender 的标头将映射到 META 键 HTTP_X_BENDER。
所以标题的名称应该是X-Requested-With
:
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
推荐阅读
- python - 如何使用python在for循环中加密图像
- c# - ASP.NET Core 2.1 文件上传 DirectoryNotFoundException:找不到路径的一部分
- email - 在 GO 中使用代理后面的 SMTP / 电子邮件客户端
- java - 工具栏后退按钮和 onBackPressed 方法的区别
- node.js - Nodejs:启用流式传输时,Morgon 日志未记录完整的响应时间
- google-drive-api - 是否可以让 API 密钥访问 Google Drive 文件,但匿名用户不能访问?
- amazon-web-services - 在 aws 实例中无法访问我的 Spring Boot 应用程序
- installation - 尽管使用 ODT,但与 MS Office Pro 2016 并行安装 Visio 时出现问题
- api - 执行 API 请求以生成金狗的随机图像/链接
- javascript - 通过vue-cli3创建的vue项目中,monaco-editor的ctrl + v特性无效