我使用以下代码通过我的搜索页面上的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]
搜索控制器中的
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
答案 0 :(得分:0)
正如我想的那样。后退按钮转到最后一个请求,即JS文件。它所做的全部是渲染部分,但由于它没有基本模板,所以你得到的是来自部分的搜索数据。
到目前为止,让AJAX部分工作的方法是在div
文件中添加.html.erb
标记(或任何具有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通常不能与浏览器后退按钮一起使用。