我试图将一些数据传递到我的 Controller 中,但收到 500 错误。经过一番研究,发现是由于CSRF token没有发送造成的。
看来我需要将其与数据一起包含:<?php echo $this->security->get_csrf_token_name(); ?>:"<?php echo $this->security->get_csrf_hash(); ?>"
我的 JS 非常弱,所以我对如何更改它以包含上述内容感到有点困惑。
<script type="text/javascript">
$(document).ready(function() {
$("#order").sortable({
update : function (event, ui) {
order = $('#order').sortable('serialize');
$.ajax({
url: "<?=base_url().'admin/category/update_order'?>",
type: "POST",
data: order,
success: function(response){
console.log(response);
}
});
}
});
}
);
</script>
最佳答案
token 需要在 data
中传递$.ajax
的参数.
这应该可行,但请参阅下面我的注释。
order['<?php echo $this->security->get_csrf_token_name(); ?>'] = '<?php echo $this->security->get_csrf_hash(); ?>';
但是,这里存在一些不好的做法。主要是您不应该在 javascript 中使用 PHP,因为这会阻止您将 javascript 作为单独的文件进行访问(这很好,因为浏览器会缓存它以使您的页面加载速度更快并消耗更少的带宽)。
最好将 token 存储在您的订单中 <form>
像这样的 html..
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>" />
然后它将与表单数据的其余部分一起序列化。
您还可以将 URL 存储在表单的操作属性中。这将帮助您的脚本正常降级,并将 URL 保留在一个位置而不是 2 个位置。
<form id="order" method="post" action="<?=base_url()?>admin/category/update_order">
在 $.ajax
打电话,使用类似 url: $('#order').attr('action'),
的东西假设#order 是实际的表单ID。
关于codeigniter - 如何将 Codeigniter 中的 CSRF 包含到 ajax 数据中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269439/