在jQuery中无法识别PHP代码

时间:2017-06-16 17:23:10

标签: php jquery ajax codeigniter csrf-protection

我点击按钮时调用了一个函数。我传递给函数的数据没有包含在表单标记中,所以我必须手动包含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无效。它显示就像我在数据中声明它们一样。

enter image description here

知道我为什么会这样吗?谢谢!

2 个答案:

答案 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) {

      }
    });
}