我无法向codeigniter控制器发送ajax请求.它正在抛出404 Forbidden Access错误.我已经找到了一些类似的问题,但我不确定它是否特定于CodeIgniter框架,以及该线程中的解决方案并没有解决我的问题.下面是我的ajax请求.我想知道这可能是因为CI Application文件夹的根文件夹的.htaccess,但我不想更改其默认配置.
向CI控制器发送ajax请求是否正确实现此方法?如果没有,请提出任何建议.谢谢!
var ajax_load = '{loading gif img html}'; var ajax_processor = 'http://localhost/patientcare-v1/application/controller/ajax_processor/save_physical_info'; $("#save").click(function(){ $("#dialog-form").html(ajax_load); $.post( ajax_processor, $("#physical-info").serialize(), function(responseText){ $("#dialog-form").html(responseText); }, "json" ); });
Tipihack.. 6
CodeIgniter使用csrf_protection,您可以简单地将它与Ajax和JQuery一起使用.这个(终极?)解决方案适用于多个Ajax请求(无403 ;-)并保持安全性).
更改配置打开文件/application/config/config.php并将行$ config ['csrf_token_name']更改为:
$config['csrf_token_name'] = 'token';
您可以使用其他名称,但在以后的步骤中随处更改.
在您的Javascript中添加CSRF在视图中添加脚本; 对我来说,在footer.php中显示所有视图中的代码.
该脚本创建一个名为CFG的对象.此对象可用于您的Javascript代码.CFG.url包含您网站的网址和CFG.token ...令牌.
自动续订CSRF将此代码添加到您的部分$(document).ready(function($){---})中
$(document).ready(function($){ $.ajaxSetup({data: {token: CFG.token}}); $(document).ajaxSuccess(function(e,x) { var result = $.parseJSON(x.responseText); $('input:hidden[name="token"]').val(result.token); $.ajaxSetup({data: {token: result.token}}); }); });
此脚本初始化CSRF令牌,并在每次发出请求Ajax时更新它.
用PHP发送CSRF我创建了一个名为Ajax的新控制器.在CodeIgniter中,使用它的链接是http://www.domain.ltd/ ajax/foo
send(array('foo' => 'bar')); } private function send($array) { if (!is_array($array)) return false; $send = array('token' => $this->security->get_csrf_hash()) + $array; if (!headers_sent()) { header('Cache-Control: no-cache, must-revalidate'); header('Expires: ' . date('r')); header('Content-type: application/json'); } exit(json_encode($send, JSON_FORCE_OBJECT)); } }
的发送功能自动添加CSRF和在对象中变换的阵列.
最后的结果现在,您可以非常简单地将Ajax与JQuery一起使用!
$.post(CFG.url + 'ajax/foo/', function(data) { console.log(data) }, 'json');
结果:
{"token":"8f65cf8e54ae8b71f4dc1f996ed4dc59","foo":"bar"}
当请求获取数据时,CSRF会自动更新为下一个Ajax请求.
Etvoilà!
CodeIgniter使用csrf_protection,您可以简单地将它与Ajax和JQuery一起使用.这个(终极?)解决方案适用于多个Ajax请求(无403 ;-)并保持安全性).
更改配置打开文件/application/config/config.php并将行$ config ['csrf_token_name']更改为:
$config['csrf_token_name'] = 'token';
您可以使用其他名称,但在以后的步骤中随处更改.
在您的Javascript中添加CSRF在视图中添加脚本; 对我来说,在footer.php中显示所有视图中的代码.
该脚本创建一个名为CFG的对象.此对象可用于您的Javascript代码.CFG.url包含您网站的网址和CFG.token ...令牌.
自动续订CSRF将此代码添加到您的部分$(document).ready(function($){---})中
$(document).ready(function($){ $.ajaxSetup({data: {token: CFG.token}}); $(document).ajaxSuccess(function(e,x) { var result = $.parseJSON(x.responseText); $('input:hidden[name="token"]').val(result.token); $.ajaxSetup({data: {token: result.token}}); }); });
此脚本初始化CSRF令牌,并在每次发出请求Ajax时更新它.
用PHP发送CSRF我创建了一个名为Ajax的新控制器.在CodeIgniter中,使用它的链接是http://www.domain.ltd/ ajax/foo
send(array('foo' => 'bar')); } private function send($array) { if (!is_array($array)) return false; $send = array('token' => $this->security->get_csrf_hash()) + $array; if (!headers_sent()) { header('Cache-Control: no-cache, must-revalidate'); header('Expires: ' . date('r')); header('Content-type: application/json'); } exit(json_encode($send, JSON_FORCE_OBJECT)); } }
的发送功能自动添加CSRF和在对象中变换的阵列.
最后的结果现在,您可以非常简单地将Ajax与JQuery一起使用!
$.post(CFG.url + 'ajax/foo/', function(data) { console.log(data) }, 'json');
结果:
{"token":"8f65cf8e54ae8b71f4dc1f996ed4dc59","foo":"bar"}
当请求获取数据时,CSRF会自动更新为下一个Ajax请求.
Etvoilà!