小编Ste*_*ton的帖子

在后退按钮点击呈现的原始javascript

我们的团队最近提出了一个最初的边缘案例问题,当用户从具有某种javascript呈现的页面(无论是Ajax,标签等)中单击浏览器的后退按钮时,将显示原始javascript.要重新创建,我们按照以下步骤操作:

  • 访问用户作业应用程序索引
  • 单击管理作业发布页面上的按钮
  • 点击标签(使用bettertabs gem)
  • 单击浏览器的后退按钮

之前的步骤将显示:

(function() {

  $(".job_applications").html("<li class=\"job_posting_application\">\n
    ...
    ...
    ...
    ...
  );

}).call(this);
Run Code Online (Sandbox Code Playgroud)

在一些命中或未命中的情况下,您不需要在返回上一页之前单击选项卡,但它仍然会呈现原始javascript.在一天结束时,似乎最后渲染的模板正在被缓存,这在浏览器的部分是正常的和预期的,但导致我认为是一个更大的问题.

Rails指南在" 布局和渲染 "部分中说明,特别是关于模板的MIME类型:

默认情况下,Rails将使用MIME内容类型text/html(或者如果使用:json选项则使用application/json,或者使用:xml选项的application/xml)来提供渲染操作的结果.

基于Rails默认值,我们的控制器的索引操作应该呈现我们的index.html.slim模板.但是,在拖尾服务器日志的同时对该页面进行非远程调用(例如,直接导航到浏览器中的页面)时,我们注意到它实际呈现index.js.coffee.下面是我们的控制器操作,请注意我们没有明确响应html或js格式,因为我们可能应该考虑此页面中的重叠功能:

def index
  @company_id, @division_id, @job_posting_id = params[:company_id], params[:division_id], params[:job_posting_id]

  # API requests are made here to instantiate @job_posting, et al.,
  # but are not shown for brevity

  authorize! :manage, @job_posting

  @survey = @job_posting.survey
  @job_applications = @job_posting.job_applications(sort_column, sort_direction)
end
Run Code Online (Sandbox Code Playgroud)

但是,在此设置下,index.html.slim 基于Rails默认值进行渲染.添加respond_to块时,缓存似乎仍然有效,控制器可能不关心respond_to块的存在:

def index
  ...
  ...
  respond_to do |format| …
Run Code Online (Sandbox Code Playgroud)

ajax jquery ruby-on-rails

11
推荐指数
2
解决办法
2114
查看次数

标签 统计

ajax ×1

jquery ×1

ruby-on-rails ×1