我有一个小问题,我无法解决,这篇文章通过但响应返回“500内部服务器错误”
谁来解决它?
在CI论坛搜索后,我发现这个链接codeigniter-csrf-protection-with-ajax但是我无法解决它。任何人帮助我吗?
答案 0 :(得分:4)
您应该在AJAX POST请求中包含csrf键以使操作起作用。
但是,您只是获取数据,因此使用method:'get'
代替method:'post'
应该可以解决问题并使您的请求有效。
See this question for a wonderful discussion on when to use POST and when to use GET
如果您确实计划将数据发布到服务器,并且抱怨缺少CSRF密钥,则有两种方法可以将其添加到请求中:
使用插件允许原型从codeigniter设置的csrf cookie中提取数据;这可能会更优雅,但会为你的总脚本添加更多内容;这是一篇关于如何在原型http://codeinthehole.com/writing/javascript-cookie-objects-using-prototype-and-json/
如果您从现有表单发送此请求,则 应该包含该键的隐藏输入字段,您可以使用{{1 (这是jQuery语法,但我确定原型版本并不太远)。
如果该页面中没有表单,只需在某处写一个var csrf = $("input[name=csrf_key]").val();
以确保隐藏字段由CI打印出来。
最后,请确保将该值与POST请求一起发送,以确保您是一个不想hackz0r服务器的酷人。您应该将此参数添加到JS中的ajax请求:
echo form_open(); form_close();
其中csrf是您获取密钥的变量(来自cookie或隐藏的输入)。确保名称没问题!如果您要提取Cookie,请确保Cookie名称与parameters: {'csrf_key' : csrf}
中设置的名称一致。输入令牌也一样!
希望这有帮助!