通过ajax发布JSON数据,而在view.py中没有收到任何内容

时间:2015-06-08 12:56:02

标签: jquery python ajax json django

当我尝试通过AJAX发布JSON数据并通过view.py(django框架的一部分)中的函数接收它时,我感到很困惑。

以下是使用ajax发送数据的客户端代码:

<script type="text/javascript">
    var myEvent = {
        user_token: { 
            userid: 1    
        }, 
        title: "test title", 
        privilege: "public"
    };
    console.log($.toJSON(myEvent))

    $.ajax({
        url: '/gallery/new_report/',
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: $.toJSON(myEvent),
        dataType: 'text',
        success: function(result) {
            alert(result);
        },
        error: function(ts) {
            alert("fail");
        }
    });
</script>

然后是views.py中的函数:

def new_report(request):
    #return HttpResponse(request.body)
    parameters = json.loads(request.body)
    ...

上面的代码不起作用但抛出异常说:

  

无法解码JSON对象

但如果我在此函数中取消注释注释行,则HttpResponse会返回正确的JSON字符串。

在这种情况下,如何通过ajax获取正确的JSON数据?

2 个答案:

答案 0 :(得分:0)

我刚刚将其他人已经在评论中说过的内容放在一起。

我没有测试过代码,但它应该有点工作。

<script type="text/javascript">
var myEvent = {
    user_token: { 
        userid: 1    
    }, 
    title: "test title", 
    privilege: "public"
};
console.log(myEvent)

$.ajax({
    url: '/gallery/new_report/',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: {'eventValues': myEvent},
    dataType: 'text',
    success: function(result) {
        alert(result);
    },
    error: function(ts) {
        alert("fail");
    }
});

和python视图

def new_report(request):

    values = request.POST.get('eventValues')
    #assert False, values
    parameters = json.loads(values)
    ...

答案 1 :(得分:0)

因为body是作为字节串发送的,所以

def new_report(request):
    #return HttpResponse(request.body)
    parameters = json.loads(request.body.decode(encoding='UTF-8'))
    ...

可能是您正在寻找的