关于从Django返回的简单JSON的jQuery parsererror

时间:2011-09-19 00:42:21

标签: django json jquery

我在这里做了一件非常简单的事情,从jQuery向Django发出POST请求,我在一个非常简单的场景中遇到了一个奇怪的错误。我有以下视图功能:

from django.views.generic.simple import direct_to_template as dto

def do_login(request):
    if request.method == "POST":
        return dto(request, "path/to/template.json", {
            'success': False,
            'cause': None
        }, mimetype="text/json")

这是我的模板:

{ success : {{success|lower}}{% if cause %}, cause : {{cause}}{% endif %} }

...这是我的jQuery:

$.ajax("/login/", { type: "POST",
    data: $("#loginForm").serialize(),
    success: function(data) {
        console.log("login response: " + data);
    },
    error: function(data, stats, error) {
        console.log("login fault: " + data + ", " + 
                stats + ", " + error);
    }
});

非常简单,对吧?这是我在控制台中得到的内容:

login fault: [object Object], parsererror, SyntaxError: Unexpected token s

这里出了什么问题?如果我没有在我的渲染方法上设置mimetype,那么一切正常。问题是,我想返回JSON而不必强制jQuery重新解析它。谁能在这里发现我的错误?我似乎无法看到它。

2 个答案:

答案 0 :(得分:2)

JSON无效。您需要在标识符周围使用引号,因此"success"代替success"cause"而不是cause

答案 1 :(得分:1)

from django.utils import simplejson as json

def do_login(request):
    if request.method == "POST":
        return HttpResponse(json.dumps({'success': False, 'cause': None}), content_type='application/json')