【发布时间】:2017-06-14 05:02:06
【问题描述】:
我必须寻求帮助以解决 Codeigniter 中的 AJX 调用问题。 我的系统中有 CSRF 保护,通常即使使用 AJAX/jQuery 调用也能正常工作。 现在我遇到了以下代码的麻烦,我无法修复它......只是很头疼 我要做的是每次更改复选框状态时调用控制器(我正在使用 Switchery );我想让开关多次正常工作……而不仅仅是在第一次开关时。 javascript代码如下:
$(document).ready(function() {
var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>';
var csrfHash = '<?php echo $this->security->get_csrf_hash(); ?>';
var changeCheckbox = document.querySelector('.js-switch'), changeField = document.querySelector('#results');
changeCheckbox.onchange = function() {
changeField.innerHTML = changeCheckbox.checked;
$.ajax({
url: 'myphpfile',
type: 'POST',
data : {
csrfName: csrfHash,
"checked": changeCheckbox.checked
},
dataType: "json",
success: function(result){
$("#results").append(result.error);
csrfName = result.csrfHash;
}
});
};
});
上面的脚本即使在第一次尝试时也不起作用,我得到一个 403 错误(禁止)所以,csrf 哈希根本没有传递....这真的很奇怪,因为如果我设置(使用 PHP 回显代码)将 csrf 名称和 csrf 哈希直接放入 S.ajax 数据括号中,脚本工作正常......即使只有一次。 所以问题是:为什么 csrfName 和 csrfHash 变量不随数据传递?如何使 AJAX csrf 多次正常工作? 抱歉我的英语不好,希望我能解释我的问题 非常感谢您的帮助
【问题讨论】:
标签: jquery ajax codeigniter csrf-protection