我点击按钮时调用了一个函数。我传递给函数的数据没有包含在表单标记中,所以我必须手动包含csrf标记:
function NewDeleteBox(box_id, batch_id, staff_id){
$.ajax({
url: 'oss/admin/delete_box',
type: "POST",
data: {'batch_id': batch_id, 'staff_id': staff_id, 'box_id': box_id, '<?php echo $this->security->get_csrf_token_name(); ?>': '<?php echo $this->security->get_csrf_hash();?>'},
success: function(data) {
}
});
}
但是,我的csrf_token_name和hash无效。它显示就像我在数据中声明它们一样。
知道我为什么会这样吗?谢谢!
答案 0 :(得分:1)
php代码无法在.js文件上运行。只需将它放在脚本标签内的.php文件中就可以正常工作了。
<script>
function NewDeleteBox(box_id, batch_id, staff_id){
$.ajax({
url: 'oss/admin/delete_box',
type: "POST",
data: {'batch_id': batch_id, 'staff_id': staff_id, 'box_id': box_id, '<?php echo $this->security->get_csrf_token_name(); ?>': '<?php echo $this->security->get_csrf_hash();?>'},
success: function(data) {
}
});
}
</script>
答案 1 :(得分:1)
如果您已将所有代码放入php文件中但仍无法正常工作,那么您可以采用其他方法。
将两个隐藏字段放在同一页面上,为它们分配唯一的ID。 然后在这个ajax函数中,使用jQuery获取它们的值。
<input type="hidden" id="csrf" value="<?php echo $this->security->get_csrf_token_name(); ?>">
<input type="hidden" id="hash" value="<?php echo $this->security->get_csrf_hash();?>">
然后你的javascript函数应该是这样的:
function NewDeleteBox(box_id, batch_id, staff_id){
var csrf = $("#csrf").val();
var hash = $("#hash").val();
var postdata = {'batch_id': batch_id, 'staff_id': staff_id, 'box_id': box_id};
postdata[csrf] = hash;
$.ajax({
url: 'oss/admin/delete_box',
type: "POST",
data: postdata ,
success: function(data) {
}
});
}