如何保存远程响应返回的数据?
How do I persist data returned by a remote response?
我目前正在构建一个应用程序来查询 Indeed API 的招聘信息。用户可以成功查询并得到响应。但是,如果他们例如查看职位发布然后按浏览器上的后退按钮,则数据不会保留。如何缓存 JS 响应,以便用户无需再次搜索即可看到他们的结果?我想我必须做某种缓存,但我不知道从哪里开始。我知道有一个视图辅助方法 'cache' 但我认为这不是我要找的。
jobs/index.html.haml
...snippet...
.job-search-form
= form_tag(jobs_search_path, method: "post", remote: true, id: 'job-search') do
.row
.col-md-6.job-search-keywords
= text_field_tag :q,
nil,
:class => 'form-control job-query'
= label_tag 'q', 'keywords or company'
.jobs-by-indeed
= link_to "Jobs", "http://www.indeed.com", tabindex: '-1'
by
= image_tag 'jobsearch.gif'
.col-md-4.job-search-location
= text_field_tag :l,
nil,
:class => 'form-control job-location'
= label_tag 'l', 'city, state or zip code'
.col-md-2
#search-submission= submit_tag "Search", class: 'form-control', data: { disable_with: "Searching..." }
jobs_controller.rb#search
def search
@jobs = @client.search(search_params)
respond_to do |format|
format.js
end
end
jobs/search.js.erb
$('.job-search-results').html("<%= j render 'search_results', locals: @jobs %>");
下面是一个 gif 动画,显示从职位发布返回后的空白页面。在此先感谢您的帮助。
如果你想在客户端进行缓存之类的事情,你可以在你的 js 中使用它
localStorage.setItem("key",data);
经过一番研究后,我发现 HTTP 标准并不真正支持我正在做的事情。当我应该使用 get 方法时,我使用 post 方法触发了搜索。我觉得这个解决方案是一个有效的正确答案,因为它遵守 HTTP 标准并且似乎是最可靠的解决方案,无需实现某种前端框架。
jobs/index.html.haml
...snippet...
.job-search-form
= form_tag(jobs_search_path, method: :get, remote: true, id: 'job-search') do
.row
.col-md-6.job-search-keywords
= text_field_tag :q,
nil,
:class => 'form-control job-query'
= label_tag 'q', 'keywords or company'
.jobs-by-indeed
= link_to "Jobs", "http://www.indeed.com", tabindex: '-1'
by
= image_tag 'jobsearch.gif'
.col-md-4.job-search-location
= text_field_tag :l,
nil,
:class => 'form-control job-location'
= label_tag 'l', 'city, state or zip code'
.col-md-2
#search-submission= submit_tag "Search", class: 'form-control', data: { disable_with: "Searching..." }
已将 jobs/search.js.erb
重命名为 jobs/index.js.erb
我目前正在构建一个应用程序来查询 Indeed API 的招聘信息。用户可以成功查询并得到响应。但是,如果他们例如查看职位发布然后按浏览器上的后退按钮,则数据不会保留。如何缓存 JS 响应,以便用户无需再次搜索即可看到他们的结果?我想我必须做某种缓存,但我不知道从哪里开始。我知道有一个视图辅助方法 'cache' 但我认为这不是我要找的。
jobs/index.html.haml
...snippet...
.job-search-form
= form_tag(jobs_search_path, method: "post", remote: true, id: 'job-search') do
.row
.col-md-6.job-search-keywords
= text_field_tag :q,
nil,
:class => 'form-control job-query'
= label_tag 'q', 'keywords or company'
.jobs-by-indeed
= link_to "Jobs", "http://www.indeed.com", tabindex: '-1'
by
= image_tag 'jobsearch.gif'
.col-md-4.job-search-location
= text_field_tag :l,
nil,
:class => 'form-control job-location'
= label_tag 'l', 'city, state or zip code'
.col-md-2
#search-submission= submit_tag "Search", class: 'form-control', data: { disable_with: "Searching..." }
jobs_controller.rb#search
def search
@jobs = @client.search(search_params)
respond_to do |format|
format.js
end
end
jobs/search.js.erb
$('.job-search-results').html("<%= j render 'search_results', locals: @jobs %>");
下面是一个 gif 动画,显示从职位发布返回后的空白页面。在此先感谢您的帮助。
如果你想在客户端进行缓存之类的事情,你可以在你的 js 中使用它
localStorage.setItem("key",data);
经过一番研究后,我发现 HTTP 标准并不真正支持我正在做的事情。当我应该使用 get 方法时,我使用 post 方法触发了搜索。我觉得这个解决方案是一个有效的正确答案,因为它遵守 HTTP 标准并且似乎是最可靠的解决方案,无需实现某种前端框架。
jobs/index.html.haml
...snippet...
.job-search-form
= form_tag(jobs_search_path, method: :get, remote: true, id: 'job-search') do
.row
.col-md-6.job-search-keywords
= text_field_tag :q,
nil,
:class => 'form-control job-query'
= label_tag 'q', 'keywords or company'
.jobs-by-indeed
= link_to "Jobs", "http://www.indeed.com", tabindex: '-1'
by
= image_tag 'jobsearch.gif'
.col-md-4.job-search-location
= text_field_tag :l,
nil,
:class => 'form-control job-location'
= label_tag 'l', 'city, state or zip code'
.col-md-2
#search-submission= submit_tag "Search", class: 'form-control', data: { disable_with: "Searching..." }
已将 jobs/search.js.erb
重命名为 jobs/index.js.erb