我正在开发一个运行在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' ],...}
为什么我不接受像我发送的那样的dict dict?
Ajax在“发送”之前对数据做了什么?
谢谢
JS dictionnary
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"}}
答案 0 :(得分:7)
jquery会在通过ajax发送之前将你的js dict(它在js中称为object)分解为多个变量,所以在python端没有dict,基本上你不能从js传递一个字典到python通过ajax ...然而他们都理解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'))
不过,如果你使用的是ajax,我强烈推荐使用firebug,所以可以看到whtas正在进行中