Rails 3简单的AJAX删除无法正常工作,因为没有随请求发送authenticity_token

| 我正在提交一个简单的ajax删除请求,如下所示:
#invitation_actions
  =link_to \"delete\", invitation_path(invitation), :method=>:delete, :remote=>true, :class=>\"remove\", :confirm=>\'Are you sure you?\'
请注意,由于所有页面中都包含csrf_meta_tag标记,因此具有请求的页面包含了authenticity_token。 当我查看日志时,我看到删除请求缺少authenticity_token: 在2011-04-22 11:21:21 -0700开始为127.0.0.1的DELETE \ / invitations / 5 \   由InvitationsController#destroy处理为   参数:{\“ id \” => \“ 5 \”} 现在,如果我从代码中删除\“:remote =>:true \”,即我执行常规页面加载删除工作,并且在日志文件中看到以下内容: 在2011-04-22 12:52:19 -0700为127.0.0.1开始发布POST \“ / invitations / 10 \”   由InvitationsController#destroy处理为HTML   参数:{\“ authenticity_token \” => \“ qlT8uX / WGQeOQSmVZzw1v8rFdSTHDRbzNY0zpSc9mV0 = \”,\“ id \” => \“ 5 \”} 为什么在AJAX情况下是DELETE而在非AJAX情况下是POST? 为什么DELETE不包含authenticity_token? 谢谢你的帮助。     
已邀请:
您可能会想到的第一个可能原因是,如果您的UJS脚本使用了两个月以上,则可能需要将其更新为最新版本,以便您的应用程序使用AJAX发送真实性令牌要求。 这种行为上的变化发生在2011年2月,这意味着必须更新所有的Rails UJS脚本: http://groups.google.com/group/rubyonrails-security/browse_thread/thread/2d95a3cc23e03665 问题的第二部分询问非AJAX情况下用于删除的HTTP POST动词。这是因为Rails必须模拟REST表单处理,因为浏览器无法实现所有4个HTTP动词,例如GET,POST,PUT和DELETE,因为这些动词在HTML中无效。 JavaScript(AJAX)可以做真实的事情,因为它控制发送到AJAX端点的标头。     
另外,您需要在应用程序布局文件的
<head>
标记内添加
<%= csrf_meta_tag %>
。该帮助程序将附加一些附加的
<meta>
标记,这对于
jquery_ujs
脚本组成有效的POST请求是必需的。     

要回复问题请先登录注册