[英]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.