javascript - 在 Django 中使用 POSTed json 对象

标签 javascript jquery python django json

我试图弄清楚如何在 Django 中处理 POSTed json 对象。我正在将 json 对象发布到服务器,并希望像 python 字典一样使用它。

这是我的js:

$.post(
        "/projects/vote/", 
        obj,
        function(data) {
            //alert("Data Loaded: " + data);
            alert(data["msg"]);
});

我要返回的内容(django View 结束):

return HttpResponse(json.dumps(foo), mimetype="application/json")

哪里

foo = {"msg": str(postdata)}

换句话说,我将一个 json 对象发布到服务器,并警告我在服务器上获得的 python 对象的字符串,以便我可以看到发生了什么。

如果我的对象是:

var obj = {
    'bulk': false,
    'data': {
          'chosen': '14',
          'proj1': '15',
          'proj2': '14',
          'proj3': '16',
          'more': false,


        },
    'data2': [
           {
               'a': 'apple'
           },
           {
               'b': 'banana'
           },
        ],      
  }

我得到这个返回:

<QueryDict: {u'data[proj3]': [u'16'], u'data[proj2]': [u'14'], u'data[chosen]': [u'14'], u'data[proj1]': [u'15'], u'bulk': [u'false'], u'data2[0][a]': [u'apple'], u'data[more]': [u'false'], u'data2[1][b]': [u'banana']}>

为什么 json obj 和 python dict 的结构不一致?我怎样才能使结构相同?例如我会将 data2 作为另一个字典的键,而不是 data2[0][a]

我如何获取帖子数据:

# django version 1.4
postdata = request.POST.copy()

最佳答案

您可以使用 JSON.stringify 将 json 作为纯字符串发布,如下所示:

    $.post(
            "/projects/vote/", 
            {msg: JSON.stringify(obj)},
            function(data) {
                //alert("Data Loaded: " + data);
                alert(data);
    });

因此,在服务器端,您应该从 request.POST 中提取 'msg':

    def view(request):
          return HttpResponse(request.POST['msg'], mimetype="application/json")

请注意,某些浏览器默认不支持 JSON.stringify,您可能需要使用 json lib:https://github.com/douglascrockford/JSON-js

关于javascript - 在 Django 中使用 POSTed json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13667914/

相关文章:

javascript - 从另一个模式中启动模式窗口

javascript - jQuery 没有正确执行

python - Kivy 中的 "Always on top"窗口

javascript - 在调用单击处理程序之前检查复选框

javascript - 如何增加 d3 中日期轴的范围?

javascript - 复选框 $.change 被自身触发并循环,因为它正在 $.change 内部被修改

python - 使用 scipy sqlrep 进行周期性插值

python - 如何在没有 numpy 的情况下 reshape 列表

javascript - 将 id 解析为 Bootstrap 模式

javascript - 递归模式js