У меня есть домашняя страница, разделенная на два раздела, где в одном из них у меня есть форма, которую пользователь может заполнить и отправить. Отправка формы должна обновлять только 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>