【问题标题】:Passing dict through views with JSON and AJAX使用 JSON 和 AJAX 通过视图传递 dict
【发布时间】:2018-06-07 21:03:43
【问题描述】:

我有一个创建字典的视图,比如说:

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 var 上没有数据 @ 987654326@ 和似乎是request.body 上的字典作为带有很多%s 的二进制字符串,如果我尝试使用json.loads(request.body.decode()),它会惨遭失败:

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我在这里错过了什么?

【问题讨论】:

    标签: jquery json ajax django


    【解决方案1】:

    JSON.parse 应该处理包含双引号中的属性名称的字符串,如下所示:'{"2": 4, "3": 6}'

    【讨论】:

    • 不应该 $.ajax() 字符串化键吗?
    【解决方案2】:

    我实际上是通过删除 contentType: 'application/json' 解决了这个问题,但不知道为什么,但是……它正在工作。

    【讨论】:

      猜你喜欢
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 2015-07-06
      • 2021-08-06
      • 1970-01-01
      相关资源
      最近更新 更多