Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery CSRF Codeigniter保护和AJAX调用_Jquery_Ajax_Codeigniter_Csrf Protection - Fatal编程技术网

Jquery CSRF Codeigniter保护和AJAX调用

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

我必须请求帮助解决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; } }; };
}; 也许你的意思是:

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错误。我真的不知道如何解决这个问题。。。