我构建了一个表,底部有按钮,通过data-remote =“true”加载一些额外的行。这个传递给控制器,有一个format.js响应,jquery追加到表中。除了一件事,一切都很好。 Safari似乎正在做某种......急切加载它遇到的第一个URL? Chrome或Firefox中不会出现此问题。
我的HTML链接如下所示:
<a turbolinks="false" data-remote="true" href="/users/name?expand=5">5</a>
<a turbolinks="false" data-remote="true" href="/users/name?expand=50">50</a>
<a turbolinks="false" data-remote="true" href="/users/name?expand=500">500</a>
当我访问我的“/ users / name”路线时,我看到:
Processing by UsersController#show as HTML
Processing by UsersController#show as JS
Parameters: {"id"=>"name"}
Parameters: {"expand"=>"5", "id"=>"name"}
Rendering users/show.html.erb within layouts/application
Rendering users/show.js.erb
提供HTML和JS响应。这会查询我的数据库两次(首先是初始数据,然后是另外五行)。只在页面上(正确)呈现初始数据。
为什么只有Safari通过点击链接才能提出此要求?
这很奇怪,但我很确定我想出来了。 Safari正在尝试通过预取我在该页面上经常单击的链接的数据(现在正在点击很多,因为我正在测试它)来提供帮助。
在我的第一个例子中,您可以看到始终调用“expand => 5”。我点击了“expand => 50”链接10次,然后尝试点击“/ users / name”路线。现在,每个请求看起来像:
Processing by UsersController#show as HTML
Processing by UsersController#show as JS
Parameters: {"id"=>"name"}
Parameters: {"expand"=>"50", "id"=>"name"}
这有时是一个额外的查询,但我想它并没有伤害。如果有的话,它会让我的数据库缓存一个半可能发生的请求。