Codeigniter CSRF Jquery问题

时间:2012-04-03 07:40:05

标签: php jquery codeigniter

我很困惑为什么codeigniter不会让我使用它:

$(function() {
    var csrf = $.cookie("<?php echo $this->config->item('csrf_cookie_name'); ?>"),
        csrfToken = "<?php echo $this->security->get_csrf_token_name(); ?>";
    $('.notificationBoxClose').click(function() {
        var url = $(this).attr('href');
        $.post(url, {csrfToken: csrf}, function() {
            $('#notification').fadeOut('slow', function() {$this.remove()});
        });
        return false;
    });
});

当我像这样完全相同的代码时,它可以正常工作:

$(function() {
    var csrf = $.cookie("<?php echo $this->config->item('csrf_cookie_name'); ?>");
    $('.notificationBoxClose').click(function() {
        var url = $(this).attr('href');
        $.post(url, {<?php echo $this->security->get_csrf_token_name(); ?>: csrf}, function() {
            $('#notification').fadeOut('slow', function() {$this.remove()});
        });
        return false;
    });
});

为什么我不能使用security-&gt; get_csrf_token_name(); ?&GT;变成一个变量?

1 个答案:

答案 0 :(得分:3)

因为您不能将变量用作对象键。您需要像这样插入:

$(function() {
    var postData = {};
    var csrfToken = "<?php echo $this->security->get_csrf_token_name(); ?>";
    postData[csrfToken] = $.cookie("<?php echo $this->config->item('csrf_cookie_name'); ?>"),
    $('.notificationBoxClose').click(function() {
        var url = $(this).attr('href');
        $.post(url, postData, function() {
            $('#notification').fadeOut('slow', function() {$this.remove()});
        });
        return false;
    });
});