【问题标题】:Passing a dict of dict with Ajax使用 Ajax 传递 dict 的 dict
【发布时间】:2016-10-08 11:28:20
【问题描述】:

我正在开发一个在 Django 上运行的网站。 我需要使用 Ajax 将数据从 Javascript 传递到我的 Python 代码。

这是我的代码:

// Javascript file
   function myFunc() {
        {...} // Generate var 'values' which is a dict of dict {{},{}...}
        console.log(JSON.stringify(values));
        $.ajax({
                url : "holt/",
                type : "POST",
                data : values,
                success : function (json) {
                   console.log(json)
                },
                error : function () {
                    alert("Error Ajax");
                }
            })
    }

我在 python 中的看法:

  class getHolt(TemplateView):
        def get(self, request, *args, **kwargd):
            pass 
        def post(self, request, *args, **kwargd):
            if request.user.is_authenticated():
                data = dict(request.POST)
                h = Holt(data)
                response_data, success = h.get_holt(2021, no_freeze=True)
                return HttpResponse(
                    json.dumps(response_data),
                    content_type="application/json"
                )

但是当我运行它时,使用:

Javascript 值

values= {
    "1":{"data_2013":"49105","data_2014":"92620","data_2015":"30000","data_2016":"1945000"},
    "2":{"data_2013":"2885906","data_2014":"2876120","data_2015":"2882653","data_2016":"2787520"},
    "3":{"data_2013":"29201124","data_2014":"29470635","data_2015":"29383195","data_2016":"30154361"}}

我在我的 Python 代码中收到了这个:

print request.POST

print dict(request.POST)

{u'1[data_2014]': [u'92620'], u'1[data_2015]': [u'30000'], u'3[data_2013]': [u'29201124'], u'3[data_2014]': [u'29470635'],...}

为什么我没有像我发送的那样收到 dict 的 dict ?

Ajax 在“发送”数据之前对数据做了什么?

谢谢

JS 字典

console.log(JSON.stringify(values));
   {"1":{"data_2013":"49105","data_2014":"92620","data_2015":"30000","data_2016":"1945000"},"2":{"data_2013":"2885906","data_2014":"2876120","data_2015":"2882653","data_2016":"2787520"},"3":{"data_2013":"29201124","data_2014":"29470635","data_2015":"29383195","data_2016":"30154361"}}

【问题讨论】:

  • 你真的得到与你的 javascript 发送的不同的值吗?.. Django 的请求帖子是一个包含这些值的查询字典。它不包含原始帖子数据,您可能会在 request.body 中找到它,尽管您最好学习如何使用帖子数据
  • 您好,感谢您的帮助。是的,我不知道 request.POST 是这样工作的。但是我在正文中找到了值,但格式类似于上面:1 [data_xxx] = 1234。也许我这样做完全错了?
  • 那么你为什么不在javascript中显示你的字典呢?

标签: javascript jquery python ajax django


【解决方案1】:

jquery 会在通过 ajax 发送之前将你的 js 字典(它在 js 中称为对象)分解为多个变量,因此在 python 端没有字典,基本上你不能通过 ajax 将字典从 js 传递到 python ...但是他们都理解 json 。

所以你需要在发送之前对你的字典进行 json 编码

   $.ajax({
            url : "holt/",
            type : "POST",
            data : { 'values' : JSON.stringify(values) } ,
            success : function (json) {
               console.log(json)
            },
            error : function () {
                alert("Error Ajax");
            }
        })

并在 python 视图中解码它们

dict_ = json.loads(request.POST.get('values'))

顺便说一句,如果您使用 ajax,我强烈建议您使用 firebug,这样可以看到正在发生的事情

【讨论】:

  • 完美,非常感谢,它运行良好。 (感谢萤火虫提示)
猜你喜欢
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 2017-12-21
相关资源
最近更新 更多