交互Django和Ajax

时间:2013-08-07 15:48:45

标签: django jquery

我正在尝试将数据发送到服务器并与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它成功了。 我的错误是什么?

2 个答案:

答案 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);