Jquery Ajax post从Django返回CSRF错误
我使用的是python 3.2和Django 1.6。这方面似乎有很多问题,但我仍然不知道我做错了什么。以下是html页面:Jquery Ajax post从Django返回CSRF错误,jquery,ajax,django,csrf,Jquery,Ajax,Django,Csrf,我使用的是python 3.2和Django 1.6。这方面似乎有很多问题,但我仍然不知道我做错了什么。以下是html页面: <script> $('#submit').click(function() { var str = $('#regForm').serialize(); $('#result').html("Trying to make account..."); $( '#btn' ).hide(); $.post( 'ajax/r
<script>
$('#submit').click(function() {
var str = $('#regForm').serialize();
$('#result').html("Trying to make account...");
$( '#btn' ).hide();
$.post( 'ajax/registerSubmit', str, function( data ) {
if (data.indexOf("you have been logged in.") >= 0) {
$( "#result" ).empty().append( data );
setTimeout(function(){
window.location = '';
}, 500);
}
else {
$( "#result" ).append( data );
$( '#btn' ).show();
};
});
});
</script>
<div id="Form" title="Register Form">
<table cellspacing="10" width="100%">
<form id="regForm" action="">
{% csrf_token %}
<tr>
<td>Username:</td>
<td colspan="2"><input type="text" name="username" size= "30" required /></td>
</tr>
<tr>
<td>Password:</td>
<td colspan="2"><input type="password" name="password1" size= "30" required /></td>
</tr>
<tr>
<td>Password Confirm:</td>
<td colspan="2"><input type="password" name="password2" size= "30" required /></td>
</tr>
<tr>
<td>Email:</td>
<td colspan="2"><input type="text" name="email" size= "30" required /></td>
</tr>
<tr>
<td>First Name:</td>
<td colspan="2"><input type="text" name="firstName" size= "30" required /></td>
</tr>
<tr>
<td>Last Name:</td>
<td colspan="2"><input type="text" name="lastName" size= "30" required /></td>
</tr>
<tr>
<td>Phone Number:</td>
<td colspan="2"><input type="tel" name="phone" size= "30" placeholder="##########" /></td>
</tr>
<tr>
<td>Epa Emts Number:</td>
<td colspan="2"><input type="text" name="epaemtsNumber" size= "30" placeholder="Optional" /></td>
</tr>
</form>
</table>
<div id="result"></div>
<div id="btn">
<button id="submit">Submit</button>
</div>
而且上面说没有送婴儿车。我还可以添加所需的Django视图代码。我放置了print语句,以查看它能走多远,但它永远不会到达“ajax/registerSubmit”
谢谢,您还需要在AJAX负载中发送CSRF令牌,而不仅仅是头 鉴于令牌与会话中的令牌相同,JS的常见模式是从会话中获取令牌,并将其添加到每个AJAX帖子的有效负载中
在这里查看如何操作:这里有一个相关的帖子,也许它可以帮助你:谢谢,这很有效。我之前看到过,但我可以看到它确实有一个csrf令牌,所以我认为这就是js所做的。无论出于何种原因,它都不会使用
$('#regForm').serialize()
发送表单数据,因此我必须使用旧的var username=$(“input#usernameForm”).val()代码>。
Cookie: "csrftoken=Xg0AMGcGeMuNhudDnyzZBS7Zc5du10rg;
sessionid=7an0o3vq2df6k8qloy1ers37wzt2f2wr"