我使用以下代码通过搜索页面上的 JS 请求获取数据
<%= link_to 'All', '/search?type=all', id: 'active', remote: true %>
<%= link_to 'Photographers', '/search?type=photographers', remote: true %>
一切正常,我正在按预期获取数据。但是,当我点击其他链接,然后点击后退按钮(由浏览器提供)时,它会在空白页面上向我显示 JS 请求数据,而不是返回到搜索页面。
是否有任何解决方法或解决方案?
在routes.rb中
resources :search, only: [:index]
在搜索 Controller 中
def index
// search processing
respond_to do |format|
format.html
format.js
end
end
搜索/index.js.erb
$('#search-area').html("<%= j render partial: 'search_area' %>");
我正在使用 Rails 5.0 和 Puma
最佳答案
正如我所想。后退按钮转到最后一个请求,即 JS 文件。它所做的只是渲染部分内容,但由于它没有基本模板,因此您得到的只是部分内容的搜索数据。
到目前为止,我让 AJAX 部分工作的方法是在 .html.erb
文件中添加一个 div
标记(或者任何带有 ID 的内容)。例如,来自具有 AJAX 可排序表的项目:
index.html.erb
...
<div class="card card-block" id="article-index">
<%= render 'indextable' %>
</div>
...
index.js.erb
$("#article-index").html("<%= escape_javascript(render("indextable")) %>");
两者都引用我想要呈现的表数据的部分内容。技巧就在 .js.erb
文件中,使用将 innerHTML
设置为 Rails escape_javascript(render..)
调用的语法。这样,返回导航将从另一个页面返回到搜索结果页面。
尝试一下,让我知道它是否有效。您可能会获得呈现的搜索结果页面的 HTML 模板,但没有任何数据。 AJAX 通常不适用于浏览器后退按钮。
关于javascript - 使用浏览器历史记录时,Rails link_to Remote True 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39145847/