php - Ajax 仅第一次工作,第二次加载时出现 CSRF 令牌错误。如何解决这个问题?
问题描述
在我的代码中,Ajax 第一次完美运行,但是当页面第二次加载 ajax 时它无法正常运行,我第二次收到 CSRF 403 错误。
这是我的控制器:
$csrf_name = $this->security->get_csrf_token_name();
$csrf_hash = $this->security->get_csrf_hash();
$output = array("draw" => $draw,"recordsTotal" => $total_records,"recordsFiltered" => $total_records,"data" => $data, $csrf_name => $csrf_hash);
echo json_encode($output);
exit();
这里是 JS:
$(document).ready(function() {
var csrf = jQuery('#csrf_hash').val();
$.fn.dataTable.moment('DD/MM/YYYY');
$('#messages').DataTable({
responsive: true,
iDisplayLength: 50,
"processing": true,
"serverSide": true,
"ajax": {
url : "<?php echo site_url("iot_lora/iot_lora_datatable_ajax") ?>",
type : 'POST',
"data": function(d) {
var frm_data = $('form').serializeArray();
$.each(frm_data, function(key, val) {
d[val.name] = val.value;
});
}
},
"fnDrawCallback" : function(response) {
var new_csrf = '<?php echo $this->security->get_csrf_hash(); ?>';
//alert(new_csrf);
//$("#csrf_hash").val("");
},
});
});
我的ajax设置:
$(function($) {
$.ajaxSetup({
data: {
'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'
}
});
});
解决方案
希望它会帮助你。
在 header.php 文件中添加以下代码。
<meta name="csrf-token" content="{{ csrf_token() }}">
比在 ajax 的标头中添加 X-CSRF-TOKEN 。
$.ajax({
url : "URL",
type : "POST/GET",
dataType : "JSON",
data : $("#FORMDATA").serialize(),
headers : {"X-CSRF-TOKEN" : $('meta[name="csrf-token"]').attr('content')},
success : function (res){
},
error : function (err){
}
});
推荐阅读
- upload - 有没有办法在赛普拉斯延迟上传请求?
- extjs - Sencha cmd dev 使用非捆绑文件构建输出
- angular - 在功能模块中声明组件
- python - 如何编译使用 Julia 包的可移植 Python 应用程序?
- amazon-web-services - Dynamodb ttl 检查
- prolog - 如何使用 Prolog 代码检查确定性
- java - SQLTimeoutException:提交事务中的 ORA-01013 错误
- sql - 如果第一个查询返回 0,则搜索另一个表
- python - 尽管有 15 秒的隐式等待,webdriver 仍会立即移至下一页
- python - 在 python 中将 CSV 转换为类似字节的对象