使用Django 1.5.5,我试图使用$.post
将一个JS对象发布到我的视图中。
JavaScript
var oDatas = { 'csrfmiddlewaretoken': $.cookie('csrftoken') };
oDatas['2'] = [ '4', '8', '15', '16', '23', '42' ];
$.post('/my/ajax/url/', oDatas)
.done(function(oResponse, sStatus, oXHR) {
// Handling successful request
})
.fail(function(oXHR, sStatus, sErrorThrown) {
// Handling failed request
});
视图
@require_AJAX
@require_POST
def get_bacon(request):
datas = request.POST
print datas
response = HttpResponse('asdf', status=200)
return response
输出
<QueryDict: {u'2[]': [u'4', u'8', u'15', u'16', u'23', u'42'],
u'csrfmiddlewaretoken': [u'B4micC9PgcT5jCP0WLef0ZLY9DICuH8Z']}>
注意,键实际上是'2[]'
。
问题
它在oDatas['2'] = 'foobar';
中确实很好。我错过了什么?
相关答案
在通过ajax发送时,可以尝试使用tasks[]而不是任务作为参数。
在我的例子中,使用'2[]'
作为数据的密钥。不过听起来确实很恶心。
发布于 2014-05-22 19:26:47
我想我在挣扎的是。request.POST
在这里是一个QueryDict对象。Django (1.5.5),扁平任何相对复杂的嵌套JS对象.
datas = dict(request.POST.iterlists())
datas.pop('csrfmiddlewaretoken')
请注意,我使用iterlists
只是因为我的QueryDict对象包含列表。否则使用iteritems
。
然后,datas
字典就是这样一个Python:
{ 'foods[joe][]': [ 'bacon', 'chicken', ],
'foods[clara][]': [ 'lettuce', 'yogurt', 'oreo', ], }
发布于 2014-05-22 12:29:38
尝试通过body
属性访问它。文档
def get_bacon(request):
if request.is_ajax() and request.method == 'POST':
datas = request.body
else:
datas = request.POST
print datas
response = HttpResponse('asdf', status=200)
return response
您可能必须像这样解析json对象:
import json
def get_bacon(request):
datas = json.loads(request.body)
编辑:对不起,我忘了提到,您将不得不在ajax调用中压缩您的数据。
var oDatas = { 'csrfmiddlewaretoken': $.cookie('csrftoken') };
oDatas['2'] = [ '4', '8', '15', '16', '23', '42' ];
$.post('/my/ajax/url/', JSON.stringify(oDatas))
.done(function(oResponse, sStatus, oXHR) {
// Handling successful request
})
.fail(function(oXHR, sStatus, sErrorThrown) {
// Handling failed request
});
https://stackoverflow.com/questions/23806613
复制相似问题