3

在我的 Rails + Devise 应用程序中,我有一个指向多个“联系人”的链接表,每个都是一个简单的 jquery $.get AJAX 请求,它调用 Contact#show。

在单击 3-25 个链接中的任意位置(成功!)后,请求将不可避免地失败(响应状态为 0 或加载资源失败,具体取决于浏览器),之后它将永远不会再次工作,直到浏览器选项卡关闭或缓存被关闭清除。

这是请求的javascript

$.get('/contacts/1312')

细节...

  • 我的布局顶部确实有 csrf_meta_tags
  • 请求头确实包含一个“X-CSRF-Token”,其中包含来自元标记的正确 CSRF 令牌
  • 在 chrome 上,失败的请求不会作为请求显示在服务器日志中。就好像他们从未成功过一样。报告的唯一错误是在报告失败的 chrome 控制台中。这让我相信它与浏览器有关。
  • 在 Safari 上,第一次失败时,它似乎会破坏会话,任何后续请求都会导致对登录页面的请求,这让我相信它可能与设计有关

2013 年 3 月 30 日更新:查看了许多关于 SO 的相关问题(这个:Rails not reloading session on ajax post),这与 CSRF 设置不正确有关,我不认为这个问题与 CSRF 有关因为它在失败之前可以正常工作几次。

4

1 回答 1

0

我最终确实弄明白了。我正在使用将其状态保存在 cookie 中的功能 datatables.js(一个表库)。然而,它试图保存在 cookie 中的数据超过了 4kb 的最大值,所以我的 cookie 被弄乱了,导致不同浏览器的行为不同。

于 2013-10-09T16:55:55.510 回答