我一直在尝试和理解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请求中接收数据。
您需要启动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_response
而不是httpResponse
当然,请检查请求是否为ajax
。记错了语法,但类似[]
if request.is_ajax
也许您可能需要根据请求类型进行其他检查
您作为Json发布的数据应由json模型加载。
如上所述,您可以按以下方式访问POST数据: