django - Django没有从ajax接收数据
问题描述
我一直在努力工作和理解 ajax,而不是依赖 jquery 来学习。
我正在发送从文本字段获得的数据。
这是我的ajax
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('id_tags').onkeyup = () => {
// initialize new request
const request = new XMLHttpRequest();
request.open("POST", "{% url 'tag_suggestions' %}");
var keyword = document.getElementById('id_tags').value;
data = {"keyword": keyword};
//when request is finished
request.onload = () => {
console.log("Test");
}
//send request
request.setRequestHeader("X-CSRFToken", '{{csrf_token}}');
request.send(JSON.stringify(data));
};
});
这是侦听我的 ajax 请求的 django 函数
def tag_suggestions(request):
print('inside tag_suggestions ')
if request.method == 'POST':
print(request.POST.keys())
return ('Test')
else:
print('not ajax Test')
return HttpResponse('Test')
我已经测试了我的javascript代码,它很好。它监听事件,正确获取值。
但是在我的 django 中,当它执行时request.POST.keys()
,输出将是
dict_keys([])
我得出结论,我没有收到来自我的 ajax 请求的数据。
解决方案
如前所述,您可以按如下方式访问您的 POST 数据:
data = json.loads(request.body)
我认为您还需要Content-Type
在 JS Ajax 中设置一个标头才能使其正常工作:
request.setRequestHeader("Content-Type", 'application/json;');
PS感觉更像是评论,但我现在不能评论。
推荐阅读
- python - Pytorch 教程代码错误:“NameError: name 'net' is not defined”
- amazon-ec2 - 将多个预配置 VM 部署到 AWS 的最佳方式
- java - 在文件读取方面,Java IO 优于 Java NIO
- c++ - 向量
msg {} 不是在 Mac 上的 VS Code 中为 C++ 构建 - python - 是否可以将 SQLAlchemy 表类名称作为参数传递。在 Python 函数中?
- c++ - lambda 中的自动参数类型导致“使用‘模板’关键字处理...”错误
- debian - 如何在 Windows 终端的 debian wsl 中运行 vagrant
- angular - JEST 测试 NestJS 服务模型和 Mongoose
- asp.net-mvc - 同一查询多次执行延迟执行
- powerbi - 创建一个名为“birth_year”的新列以从“birthdate”列中提取年份,并格式化为文本