2012-04-03 55 views
0

我很困惑,爲什麼笨不會讓我用這個:笨CSRF jQuery的問題

$(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; 
    }); 
}); 

爲什麼不能我做安全 - > get_csrf_token_name(); ?>變成一個變量?

+0

什麼是錯誤?令牌名稱中沒有可能會破壞JavaScript代碼的字符? – bububaba 2012-04-03 07:49:50

+0

在第一個例子中,你沒有定義'csrfToken'變量。像'var csrfToken =「...'。也許這就是爲什麼 – safarov 2012-04-03 07:54:40

+0

錯誤是」您所請求的操作是不允許的「。 – Jacinto 2012-04-03 08:11:44

回答

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; 
    }); 
}); 
+0

感謝您的工作,但我還有另一個問題,如果我有另外兩個功能,我想能夠調用相同的信息,但他們有更多的數據他們正在推動。有沒有辦法讓它,所以我可以使用它像'$ .post(網址,{用戶名:用戶名,電子郵件:電子郵件,密碼:密碼,postData },function(data){'我想用csrt info作爲常量 – Jacinto 2012-04-03 19:30:32

+0

'$ .post(url,$ .extend(postData,userData),function(data){});'More on the function $ .extend:http://api.jquery.com/jQuery.extend/ – Woxxy 2012-04-03 19:35:26

+0

所以我必須做:'var userData = {}; userData [username] = username; userData [email] = email; userData [password] = password;' – Jacinto 2012-04-03 19:37:49