Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Ajax post从Django返回CSRF错误_Jquery_Ajax_Django_Csrf - Fatal编程技术网

Jquery Ajax post从Django返回CSRF错误

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

我使用的是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/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"