我正在尝试使用动态填充的字段创建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>
但是,当我选择一个下拉选项时,
新增:17个未捕获的SyntaxError:意外令牌-
从X-CSRFToken: csrftoken
行中发出:
有人可以向我指出此代码有什么问题吗?(我尝试从https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors/Unexpected_token查找它,但到目前为止还无法弄清楚)。
顺便说一句,从jQuery看来,将CSRF令牌添加到所有$ .post()请求的数据中,也可以将CSRF令牌添加到POST请求的data
,但这对我来说似乎并不是最优雅的方法,并且文档指出
因此,存在另一种方法:在每个XMLHttpRequest上,将自定义X-CSRFToken标头设置为CSRF令牌的值。
您缺少单引号,请尝试以下操作。
$(".auto-submit").change(function() {
$.post({
url: "{% url 'get-checkin-type' %}",
data: $(".auto-submit option:selected").val(),
headers: {
'X-CSRFToken': csrftoken
}
})
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句