ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 如何将Django的CSRF令牌添加到jQuery POST请求的标头中?

2019-05-27 10:22:32  阅读:280  来源: 互联网

标签:jquery javascript django django-csrf


我正在尝试使用动态预填充字段创建Django表单:也就是说,当从下拉菜单中选择一个字段(checkin_type)时,其他字段会自动预先填充相应的数据.为此,我想在选择下拉选项后立即向服务器发送POST请求.

到目前为止,我已经尝试了以下模板(在https://docs.djangoproject.com/en/2.0/ref/csrf/之后):

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<script>
    $(document).ready(function(){
        var csrftoken = Cookies.get('csrftoken');

        $(".auto-submit").change(function() {
            $.post({
                url: "{% url 'get-checkin-type' %}",
                data: $(".auto-submit option:selected").val(),
                headers: {
                    X-CSRFToken: csrftoken
                }
            })
        });
    });
</script>


<form action="" method="post">{% csrf_token %}
    {% for field in form %}
        <div class="{% if field.name == 'checkin_type' %}auto-submit{% endif %}">
            {{ field.errors }}
            {{ field.label_tag }}
            {{ field }}
        </div>
    {% endfor %}
    <input type="submit" value="Send message" />
</form>

但是,当我选择一个下拉选项时,我会得到一个

new:17 Uncaught SyntaxError: Unexpected token –

它来自X-CSRFToken:csrftoken行:

enter image description here

有人能指出我这个代码有什么问题吗? (我尝试从https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Unexpected_token查找它,但到目前为止无法弄明白).

顺便说一下,从jQuery add CSRF token to all $.post() requests’ data开始,人们还可以将CSRF令牌添加到POST请求的数据中,但这对我来说似乎不是最优雅的方法,而且文档声明

For this reason, there is an alternative method: on each XMLHttpRequest, set a custom X-CSRFToken header to the value of the CSRF token.

解决方法:

您缺少单引号,请尝试以下操作.

$(".auto-submit").change(function() {
    $.post({
        url: "{% url 'get-checkin-type' %}",
        data: $(".auto-submit option:selected").val(),
        headers: {
            'X-CSRFToken': csrftoken
        }
    })
});

标签:jquery,javascript,django,django-csrf
来源: https://codeday.me/bug/20190527/1162467.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有