Codeigniter ajax 表单使用 CSRF 的 jquery cookie 提交不需要的帖子


Codeigniter ajax form submit unwanted post with jquery cookie for CSRF

所以我有一个问题,当我使用 $.cookie jquery 插件时,我认为我的表单似乎通过提前提交而错误地提交。

所以我的形式是:

<?php
    echo form_open($this->uri->uri_string(), 'class="ajax_email_submission"');
    ?>
    <div id="email_newsletter_signup" class="ajax_email_block_signup" >
        <h3>Sign up to the newsletter:</h3>
        <?php echo form_error('signup_email','<div id="email_error" class="error">','</div>');?>
        <h3>email: <input id="users_email_address" type="email" name="signup_email" value="<?php echo set_value('signup_email'); ?>" placeholder="Your email"/> </h3>
        <input id="email_submit" type="submit" name="submit"/>
    </div>
    <?php
    echo form_close();
?>

JS是

$(document).ready(function()
{    
    $('#email_submit').click(function() 
    {
        alert('1');
        var form_data = 
        {
           users_email: $('#users_email_address').val(),
           csrf_test_name: $.cookie('csrf_cookie_name')
        };
        alert('2');
        $.ajax
        ({
            url: 'NewsLetter/submit',
            type: 'POST',
            data: form_data,
            success: function(msg)
            {
                alert('success');
            },
            error: function(msg)
            {
                alert('error');
            }
        });
        return false;
    });
});

该方法存在,如果我输入本地主机/myzone/NewsLetter/提交,则提交方法可以正常工作。

当我查看代码点火器路由器类时,我发现 $_POST 变量包含:

$_POST  array[3]        
ci_csrf_token   string  "3dad64d9aaaaaaaaaaaaaad2082ae55c"  
signup_email    string  "mail@cheeeese.com" 
submit  string  "Submit"    

提交的 URI 是 localhost/myzone/NewsLetter,因为提交是在帖子中而不是 URI,所以我被发送到索引方法而不是提交方法。

此外,在JS中发生的事情,您可能会注意到alert('1')alert('2')。只有alert('1')显示我不知道为什么会发生这种情况!

所有的帮助真的很感激

谢谢

您不是通过 ajax 而是通过 POST 方法提交表单。如果您想在提交之前进行 smth,请添加

event.preventDefault()

到您的点击功能。喜欢

$('#email_submit').click(function(event) 
{
    event.preventDefault();
    //all your calculations and ajax than
}

而不是不会提交任何表单,您将推送您的 ajax 请求