Django未从ajax接收数据
我一直试图在不依赖jquery的情况下学习和理解ajax 我正在发送从文本字段获取的数据 这是我的ajaxDjango未从ajax接收数据,django,ajax,Django,Ajax,我一直试图在不依赖jquery的情况下学习和理解ajax 我正在发送从文本字段获取的数据 这是我的ajax document.addEventListener('DOMContentLoaded', function() { document.getElementById('id_tags').onkeyup = () => { // initialize new request const request = new XMLHttpRequest()
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));
};
});
下面是django函数,它监听我的ajax请求
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请求的数据 您需要初始化
ajax
调用
$.ajax({
url: 'your url',
method: 'POST',
data: {"keyword": keyword},
success: function(response) {
# response is the data what is returned from the view, in
# your case, from tag_suggestions
}
});
在django
端,您需要返回json\u响应
而不是httpResponse
当然,还要检查请求是否是ajax
。不记得正确的答案了
语法,但类似于
if request.is_ajax
可能需要根据请求类型进行额外的检查您需要初始化
ajax
调用
$.ajax({
url: 'your url',
method: 'POST',
data: {"keyword": keyword},
success: function(response) {
# response is the data what is returned from the view, in
# your case, from tag_suggestions
}
});
在django
端,您需要返回json\u响应
而不是httpResponse
当然,还要检查请求是否是ajax
。不记得正确的答案了
语法,但类似于
if request.is_ajax
也许您需要根据请求类型进行额外的检查,Json模型应该加载作为Json的帖子数据
def tag_suggestions(request):
print('inside tag_suggestions ')
if request.method == 'POST':
data = json.loads(request.body)
print(data)
return ('Test')
else:
print('not ajax Test')
return HttpResponse('Test')
作为Json的帖子数据应该由Json模型加载
def tag_suggestions(request):
print('inside tag_suggestions ')
if request.method == 'POST':
data = json.loads(request.body)
print(data)
return ('Test')
else:
print('not ajax Test')
return HttpResponse('Test')
如前所述,您可以按如下方式访问您的帖子数据:
data = json.loads(request.body)
我认为您还需要在JS Ajax中设置内容类型
头,这样它才能工作:
request.setRequestHeader("Content-Type", 'application/json;');
附加说明更像是一个评论,但我现在不能发表评论。正如前面提到的,您可以访问您的帖子数据,如下所示:
data = json.loads(request.body)
我认为您还需要在JS Ajax中设置内容类型
头,这样它才能工作:
request.setRequestHeader("Content-Type", 'application/json;');
p.S.感觉更像是评论,但我现在不能评论。谢谢,但我没有使用jquery。谢谢,但我没有使用jquery。