jquery – Django:将AJAX POST数据传递给Django会产生MultiValueDictKeyError,即使密钥存在

前端之家收集整理的这篇文章主要介绍了jquery – Django:将AJAX POST数据传递给Django会产生MultiValueDictKeyError,即使密钥存在前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的Ajax调用中包含数据:
data: { hint: {'asdf':4} },

我觉得我应该能够访问这个对象

request.POST['hint'] # and possibly request.POST['hint']['asdf'] to get 4

但是这个错误会妨碍你.我看着

MultiValueDictKeyError at /post_url/
"'hint'"

当我打印帖子数据时,我得到了奇怪的错误字典:

<QueryDict: {u'hint[asdf]': [u'4']}>

我怎么能正确传递数据,所以我在Python中保留了相同的结构并使用它与我在JS中的方式相同?

解决方法

首先,在$.ajax调用中,不是直接将所有POST数据放入data属性,而是将其添加到名为json_data的另一个属性中.例如:
data: { hint: {'asdf':4} },

应成为:

data: { json_data: { hint: {'asdf':4} } },

现在,应使用JSON.stringify将json_data转换为纯字符串:

data: { json_data: JSON.stringify({ hint: {'asdf':4} }) },

这会将数据作为字符串传递给Django,可以通过以下方式检索:

data_string = request.POST.get('json_data')

可以将其转换为类似dict的对象(假设json是在顶部导入json导入的):

data_dict = json.loads(data_string)

或者,没有中间data_string:

data_dict = json.loads(request.POST.get('json_data'))
print data_dict['hint']['asdf'] # Should print 4

猜你在找的jQuery相关文章