【问题标题】:jQuery parsererror on simple JSON returned from Django从 Django 返回的简单 JSON 上的 jQuery parsererror
【发布时间】:2011-11-19 21:29:48
【问题描述】:

我在这里做了一件非常简单的事情,从 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 重新解析它。谁能在这里发现我的错误?我好像看不到。

【问题讨论】:

    标签: django json jquery


    【解决方案1】:

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

    【讨论】:

    • 谢谢,解决了。我不知道这是必需的,因为在 JS 中 { success: true }{ 'success': true } 相同。
    【解决方案2】:
    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')
    

    【讨论】:

    • 超级有帮助,谢谢。这让事情变得更容易一些,并且意味着我不必为它编写模板。
    猜你喜欢
    • 2011-08-14
    • 2011-11-20
    • 1970-01-01
    • 2011-06-30
    • 2012-05-17
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    相关资源
    最近更新 更多