Jquery CSRF Codeigniter保护和AJAX调用
我必须请求帮助解决AJX调用Codeigniter的问题。 我在系统中启用了CSRF保护,即使使用AJAX/jQuery调用,它通常也可以正常工作。 现在我遇到了以下代码的麻烦,我无法修复它…只是有一个很大的头痛 我试图做的是在每次更改复选框状态时调用控制器,我正在使用Switchery;我想让开关正常工作几次…不仅仅是在第一次开关。 javascript代码如下所示: $document.readyfunction{ var csrfName=; var csrfHash=; var changeCheckbox=document.querySelector'.js switch',changeField=document.querySelector'results'; changeCheckbox.onchange=函数{ changeField.innerHTML=changeCheckbox.checked; $.ajax{ url:'myphpfile', 键入:“POST”, 数据:{ csrfName:csrfHash, 选中:changeCheckbox.checked }, 数据类型:json, 成功:结果{ $results.appendresult.error; csrfName=result.csrfHash; } }; };Jquery CSRF Codeigniter保护和AJAX调用,jquery,ajax,codeigniter,csrf-protection,Jquery,Ajax,Codeigniter,Csrf Protection,我必须请求帮助解决AJX调用Codeigniter的问题。 我在系统中启用了CSRF保护,即使使用AJAX/jQuery调用,它通常也可以正常工作。 现在我遇到了以下代码的麻烦,我无法修复它…只是有一个很大的头痛 我试图做的是在每次更改复选框状态时调用控制器,我正在使用Switchery;我想让开关正常工作几次…不仅仅是在第一次开关。 javascript代码如下所示: $document.readyfunction{ var csrfName=; var csrfHash=; var cha
}; 也许你的意思是:
var data = {"checked": changeCheckbox.checked};
data[csrfName] = csrfHash;
然后:
$.ajax({
url: 'myphpfile',
type: 'POST',
data : data
[...]
csrfName是一个变量,因此如果要添加一个名为csrfName的属性,必须使用object[variable]语法。
以书面形式:
data : {
csrfName: csrfHash
}
您正在使用csrfName属性而不是其内容创建对象
或者,如果您正在使用ES6,您可以编写:
data : {
[csrfName]: csrfHash,
"checked": changeCheckbox.checked
}
请注意,您正在进行一次以上的ajax调用,只需用户jquery.cookie方法发送csrfhash和csrfcookie值即可 然后像这样通过ajax传递csrf的值
"data:<?php echo $this->security->get_csrf_token_name(); ?>": Cookies.get('csrf_cookie_name')
只需根据您的cookie名称更改csrf_cookie_名称,即可完成。我希望能帮助您同时记录文档。querySelector仅返回第一个匹配元素…并非所有匹配项感谢您的反馈和评论。亚当,你的暗示解决了这个问题;现在,脚本在第一个复选框开关处工作正常。我是否应该编辑csrfName=result.csrfHash;成功函数中的行使其多次工作?只是为了添加更多信息…我检查了PHP脚本返回的JSON代码,它为下一次提交提供了正确的新哈希:`csrfHash:18911515b6521496f1dfcfa88bc5da6d csrfName:csrf_ats_name`@Federico是的,如果不是,将变量声明在on ready functionNegative的范围之外:…我不能调用AJAX多次。我将var-csrfHash和var-csrfName移到了ready函数之外……但我无法为下一个AJAX调用获取新的哈希值……仍然从服务器收到403错误。我真的不知道如何解决这个问题。。。