【问题标题】:how to deserialize data from jquery/ajax in django view如何在 django 视图中反序列化来自 jquery/ajax 的数据
【发布时间】:2018-11-13 03:59:06
【问题描述】:

我想反序列化这个数据

csrfmiddlewaretoken=5U9Fgv8Gdmft6wU1zwPJlRxwIsXHaElfvKTtqkT2HtzWc6uNqFq1AeogAOkIjWb5&title=jstree+inline+HTML+demo&ubc=1&company-name=teste&company-cnpj=222.222.222-22&company-email=test%

但是当我尝试 json.loads(data) 或 data.json()

我收到这个错误

从 None 提高 JSONDecodeError("Expecting value", s, err.value) json.decoder.JSONDecodeError:预期值:第 1 行第 1 列(字符 0)

$('#documet').ready(function(){                        
        $('#project_form_id').on('submit', function(event){
            var csrfToken = 
$('input[name="csrfmiddlewaretoken"]').val();

            event.preventDefault()
            var form = $(this)                                       

            $.ajax({
                url: "{% url 'project_create' %}",
                data: {'form':form.serialize(), 'areas':JSON.stringify(list_area)},
                type: form.attr("method"),
                dataType: 'json',
                headers: {'X-CSRFToken': '{{ csrf_token }}'},    
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",    
                success: function(data){

                    console.log(data.areas)
                    console.log(data.project)

                },
                error:function(error){
                    console.log(error)
                    //$("#modal-book .modal-content").html(data.html_form);

                }
            });



        })
    })

【问题讨论】:

  • 这是 urlencoded 数据,不是 json..
  • 对不起,我还在学习,我怎样才能使这些数据在我的视图中可用,因为我正在尝试在我的表单中使用它
  • 好吧,如果要传输 json (application/json; charset=utf-8),首先需要正确的 contentType,然后将 data 属性转换为 json 字符串(请记住,json 是一个字符串格式..)
  • 很抱歉打扰你,但现在我得到这个'为了允许非字典对象被序列化设置'类型错误:为了允许非字典对象被序列化设置安全参数为 False。

标签: jquery json django


【解决方案1】:

这应该让你更接近你想去的地方..

        $.ajax({
            url: "{% url 'project_create' %}",
            data: JSON.stringify(form.serializeArray()),
            type: 'POST',
            dataType: 'json',
            headers: {'X-CSRFToken': '{{ csrf_token }}'},    
            contentType: 'application/json; charset=utf-8',    

您可以使用以下内容查看差异(大部分是从 jQuery serializeArray 文档中窃取的):

<!doctype html>
<html>
<head>
  <meta charset="UTF-8">
  <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body>

<form>
  <div><input type="text" name="a" value="1" id="a"></div>
  <div><input type="text" name="b" value="2" id="b"></div>
  <div><input type="hidden" name="c" value="3" id="c"></div>
  <div>
    <textarea name="d" rows="8" cols="40">4</textarea>
  </div>
  <div><select name="e">
    <option value="5" selected="selected">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
  </select></div>
  <div>
    <input type="checkbox" name="f" value="8" id="f">
  </div>
  <div>
    <input type="submit" name="g" value="Submit" id="g">
  </div>
</form>

<script>
$('form').on('submit', function (e) {
    e.preventDefault();
    var form = $(this)                                       
    console.log($(this).serialize());
    console.log($(this).serializeArray());
    return false;
});
</script>

</body>
</html>

【讨论】:

  • 感谢您的帮助,但是当我使用 contentType: 'application/json; charset=utf-8',我尝试打印(request.POST)或request.POST.dict()它是空的
  • 感谢@thebjorn - 节省了很多汗水
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 2021-12-08
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多