我有一个分为两个部分的主页,在其中一个部分中,我有一个用户可以填写和提交的表格。表单提交应仅刷新包含该表单的div
。为此,我将使用下面显示的AJAX。
一切正常,除非我在提交表单后回击。 csrfmiddlewaretoken
作为参数出现在url中。知道这是否正常吗?我该如何预防?
表格:
<form id="post-form">
{% csrf_token %}
<fieldset>
<legend>Facebook Login</legend>
<div class="form-group">
<label for="InputName">Name</label>
<input type="text" class="form-control" placeholder="name">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</fieldset>
</form>
AJAX脚本:
<script src="{% static "vendor/jquery/jquery.min.js" %}"></script>
<script src="{% static "vendor/bootstrap/js/bootstrap.bundle.min.js" %}"></script>
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<script>
var csrftoken = Cookies.get('csrftoken');
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
</script>
<script type="text/javascript">
$('#post-form').on('submit',function(event){
event.preventDefault();
console.log("form submitted!"); // sanity check
$.ajax({
type:'POST',
url:'{% url 'test:test_url' %}',
data:{
Name:$('#InputName').val(),
},
success:function(context){
$('#post-form').html(context);
}
});
});
</script>