我正在尝试将数据发送到服务器并与AJAX一起使用
function stats(e){
jQuery.ajax({
type: "POST",
url:"stats",
data:{'csrfmiddlewaretoken': document.getElementsByName('csrfmiddlewaretoken')[0].value,
'test':{}},
success: function(data) {alert("Congratulations!"+data);},
error: function(data) {
alert("Please report this error: "+data.responseText);}
});
}
views.py中的函数:
def stats(request):
if request.is_ajax():
if request.user.is_authenticated():
if request.POST:
return HttpResponse(request.POST['test'])
else:
return HttpResponse("post_no_exists")
else:
return HttpResponse("no authenticate")
else:
raise Http404
Django引发了在QueryDict中找不到的MultiValueDictKeyError'key“test”。 当我改变“测试”时:{} - > “测试”:1它成功了。 我的错误是什么?
答案 0 :(得分:1)
下面:
...
data: {
'csrfmiddlewaretoken': ...,
'test': {}
}
...
您尝试在POST请求中发送空对象文字。 jQuery无法弄清楚要为它发送什么值(空对象?这甚至意味着什么?),所以它根本不会发送test
参数。因此,在服务器端,尝试访问request.POST['test']
会引发KeyError。
当您将测试更改为其他文字(在本例中为数字)时,jQuery可以轻松编码并将其作为值发送。
答案 1 :(得分:0)
您需要以json
返回答案payload = {'answer': 'post_no_exists'}
return HttpResponse(json.dumps(payload, cls=LazyEncoder), content_type='application/json')
在js中
alert("Congratulations!"+data.answer);