Mot*_*ive 5 jquery codeigniter
我试图将一些数据传递到我的控制器,但我得到500错误.经过一些研究,我发现它是由CSRF令牌未被发送引起的.
似乎我需要将其与数据一起包含在内: <?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>
Run Code Online (Sandbox Code Playgroud)
令牌需要在data的参数中传递$.ajax。
这应该可行,但请参阅下面我的注释。
order['<?php echo $this->security->get_csrf_token_name(); ?>'] = '<?php echo $this->security->get_csrf_hash(); ?>';
然而,这里存在一些不好的做法。主要是您不应该在 javascript 中使用 PHP,因为这会阻止您将 javascript 作为单独的文件进行访问(这很好,因为浏览器会缓存它以使您的页面加载速度更快并消耗更少的带宽)。
最好将令牌存储在您的订单<form>html 中,如下所示。
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>" />
然后它将与表单数据的其余部分一起序列化。
您还可以将 URL 存储在表单的 action 属性中。这将帮助您的脚本正常降级,并将 URL 保留在一个位置而不是 2 个位置。
<form id="order" method="post" action="<?=base_url()?>admin/category/update_order">
Run Code Online (Sandbox Code Playgroud)
在$.ajax调用中,使用类似的内容,url: $('#order').attr('action'),假设 #order 是实际的表单 id。
| 归档时间: |
|
| 查看次数: |
13993 次 |
| 最近记录: |