我有一个创建字典的视图,比方说:
my_dict = {str(v): v*2 for v in range(2,8)}
my_dict['Total'] = {'Tip': 'Reconsider life choices'}
# bit of humour here
>> {'2': 4, '3': 6, '4': 8, '5': 10, '6': 12, '7': 14, 'Total': {'Tip': 'Reconsider life choices'}}
我将它作为'my_dict_json': json.dumps(my_dict)
传递给我的上下文字典。
在我的模板中,我用以下命令重建它:
<button id="btn_exp" type="button" class="btn btn-primary" onclick="sendDicts()">
<script>
var d = JSON.parse('{{my_dict_json|safe}}');
// This is a function I bind to the onclick attr of a button
function sendDicts(){
$.ajax({
url: '{% url 'my_model:intended_view' %}',
type: 'POST',
contentType: 'application/json',
data: {
'my_dict': d,
'another_dict': d2
},
dataType: 'json'
});
}
</script>
我不确定这是否有区别,但我的预期视图是用@csrf_exempt
装饰的,总之,当我检查(调试)预期视图时,我注意到request
变量在它的POST
上没有数据,而字典似乎在request.body
上是一个带有很多%
s的二进制字符串,如果我尝试使用json.loads(request.body.decode())
,它会失败得很糟糕,因为:
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
这里我漏掉了什么?
发布于 2018-06-08 06:14:22
我实际上是通过删除contentType: 'application/json'
解决了这个问题,不知道为什么,但是...起作用了。
发布于 2018-06-08 05:37:34
JSON.parse应该处理这样的字符串,该字符串包含用双引号括起来的属性名称:'{"2":4,"3":6}‘
https://stackoverflow.com/questions/50750121
复制相似问题