提交ajax请求时,我一直收到500错误。如果我在配置中关闭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' });
}
});
}
});
csrf_cookie_name的console.log现在是: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 :(得分:2)
有两种解决方案。两者都有效。查看这些帖子 - 包含您需要的所有信息
答案 1 :(得分:0)
我在过去无意中使用<form>
标记而不是使用CI的原生form helper form_open()
时遇到了问题。这需要存在才能创建隐藏的令牌字段。这里也有一些很好的建议:csrf-token-problem。
答案 2 :(得分:0)
前几天我遇到了这个问题,解决方案很简单(至少对我而言)
变化:
$.ajax({
csrf_cookie_name: $.cookie('csrf_cookie_name')
到
$.ajax({
csrf_test_name: $.cookie('csrf_cookie_name')
答案 3 :(得分:0)
我终于开始工作了。这是我用来实现它的jquery:
您必须同时使用令牌的名称和Cookie的名称,并使其成为post对象的一部分。所以令牌名称= cookie名称,并确保添加&amp;最后。
$('#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' });
}
});
}
});