繁体   English   中英

用Ajax传递dict的词典

[英]Passing a dict of dict with Ajax

我正在一个运行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

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

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'],...}

为什么我不接受像我发送的字典?

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"}}

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

所以你需要在发送之前对你的dict进行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'))

顺便说一句,我强烈推荐使用firebug,如果你使用ajax,那么可以看到whtas正在发生

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM