我这里有一个小问题我无法解决,这篇文章通过但响应返回“500 内部服务器错误”</p>
谁来修复它?
在 CI 论坛中搜索后,我发现了这个链接codeigniter-csrf-protection-with-ajax但我无法解决它。任何人都可以帮助我吗?
我这里有一个小问题我无法解决,这篇文章通过但响应返回“500 内部服务器错误”</p>
谁来修复它?
在 CI 论坛中搜索后,我发现了这个链接codeigniter-csrf-protection-with-ajax但我无法解决它。任何人都可以帮助我吗?
您应该在 AJAX POST 请求中包含 csrf 键以使操作生效。
但是,您只是在获取数据,因此使用method:'get'
而不是method:'post'
应该可以解决问题并使您的请求有效。
有关何时使用 POST 和何时使用 GET 的精彩讨论,请参阅此问题
如果您确实计划将数据发布到服务器,并且它抱怨缺少 CSRF 密钥,则有两种方法可以将其添加到请求中:
使用插件允许原型从由 codeigniter 设置的 csrf cookie 中提取数据;这可能更优雅,但会为您的总脚本增加一点;这是一篇关于如何在原型http://codeinthehole.com/writing/javascript-cookie-objects-using-prototype-and-json/中访问 cookie 的详细信息
如果您从现有表单发送此请求,它应该有一个包含密钥的隐藏输入字段,您可以使用类似的东西简单地访问它var csrf = $("input[name=csrf_key]").val();
(这是 jQuery 语法,但我确定原型版本不是t 太远)。如果该页面中没有表单,只需在echo form_open(); form_close();
某处写一个以确保 CI 打印出隐藏字段。
最后,确保您在 POST 请求中发送该值,以确保您是一个不想要 hackz0r 服务器的帅哥。您应该将此参数添加到 JS 中的 ajax 请求中:
parameters: {'csrf_key' : csrf}
其中 csrf 是您从中获取密钥的变量(来自 cookie 或来自隐藏的输入)。确保名字没问题!如果您要获取 cookie,请确保 cookie 名称与config/config.php
. 输入令牌也是如此!
希望这可以帮助!