2012-06-11 26 views
0

我在提交ajax請求時收到500錯誤。如果我在配置中關閉CSRF,那麼發佈就起作用。但是,一旦我打開它,然後再次出現500錯誤。使用CI 2.0.x,ajax和CSRF獲取500錯誤

在config.php我有以下值設置:

$config['csrf_token_name'] = 'csrf_test_name'; 
$config['csrf_cookie_name'] = 'csrf_cookie_name'; 

我確實有被加載jQuery的cookie,並在我的jQuery文件我有以下代碼:

$('#reorder').sortable({ 
    opacity: '0.5', 
    update: function(e, ui){ 
     newOrder = $("#reorder").sortable('serialize'); 
     csrf_cookie_name = $.cookie('csrf_cookie_name') 
     console.log(newOrder); 
     console.log(csrf_cookie_name); 
     $.ajax({ 
      csrf_cookie_name: $.cookie('csrf_cookie_name'), 
      url: "/client/saveOrder", 
      type: "POST", 
      data: newOrder, 
      // complete: function(){}, 
      success: function(feedback){ 
       console.log('success'); 
       $("#feedback").html(feedback); 
       //$.jGrowl(feedback, { theme: 'success' }); 
      } 
     }); 
    } 
}); 

的console.log的csrf_cookie_name現在是:cd660b153522bef89dc53f7f95cd6b1d所以我得到它的價值似乎?

最後一個真正簡單的函數在客戶端進行數據處理。通常情況下,我會將其中的一部分分解到模型中,但我試圖保持簡單,直到獲得它的工作。

function saveOrder() 
    { 
     $items = $this->input->post('item'); 
     echo '<br/>Items2:' . var_dump($items); 
     $total_items = count($this->input->post('item')); 

     for($item = 0; $item < $total_items; $item++) 
     { 

      $data = array(
       'pageid' => $items[$item], 
       'rank' => $item 
      ); 

      $this->db->where('pageid', $data['pageid']); 

      $this->db->update('pages', $data); 

//   echo '<br />'.$this->db->last_query(); 

     } 

視圖中沒有使用任何表單。這只是一個帶有我收集的LI的UL,我正在進行排序。

回答

0

我得到了它的最後工作。以下是我用來實現它的jQuery:

您必須同時使用令牌的名稱和cookie的名稱,並使其成爲發佈對象的一部分。所以令牌名稱= cookie名稱,並確保在最後添加一個&。

$('#reorder').sortable({ 
     opacity: '0.5', 
     update: function(e, ui){ 
      newOrder = 'csrf_test_name=' + $.cookie('csrf_cookie_name') + '&'; 
      newOrder += $("#reorder").sortable('serialize'); 
      console.log(newOrder); 
      $.ajax({ 
       url: "/client/saveOrder", 
       type: "POST", 
       data: newOrder, 
       csrf_test_name: $.cookie('csrf_cookie_name'), 
       // complete: function(){}, 
       success: function(feedback){ 
        console.log('success'); 
        $("#feedback").html(feedback); 
        //$.jGrowl(feedback, { theme: 'success' }); 
       } 
      }); 
     } 
    }); 
0

我已經在過去的問題。這需要存在才能創建隱藏的令牌字段。這裏也有一些很好的建議:csrf-token-problem

0

我前幾天有過這個問題,解決方法很簡單(至少對我來說)。
變化:
$.ajax({ csrf_cookie_name: $.cookie('csrf_cookie_name')

$.ajax({ csrf_test_name: $.cookie('csrf_cookie_name')