轨道 - 格式和渲染 - 它们如何工作



据我所知,调用render将返回对浏览器的响应。它可以返回不同类型的内容(html,json,js等)。但是,我对浏览器之后的功能有点困惑。

如果响应是 html,则浏览器仅呈现页面。如果响应是 json,通常,客户端 js 代码会获取 json 响应并对其执行一些有用的操作。如果响应是js,浏览器会怎么做?我不确定这个js是否附加到文档中并执行?这与Rails UJS有关吗?

另外,渲染与respond_to有什么关系?它们是并排使用,还是一个优于另一个?

render html:
render js:
render json:
respond_to |format| do
  format.html
  format.js
  format.json
end
抱歉,如果

这看起来像很多问题,但我认为如果这些问题一起讨论会有所帮助。

如果响应是js,浏览器会怎么做?

这完全取决于浏览器和用户的javascript环境。您的应用程序返回 js,浏览器将以它认为最好的方式处理它。

我不确定这个js是否附加到文档中并执行?这与Rails UJS有关吗?

UJS更多的是确保应用程序能够正常工作,即使用户浏览器不处理javascript。例如,您编写脚本来拦截按钮单击事件并取消单击操作,而不是执行其他操作,例如 AJAX 调用。如果用户禁用了 javascript,则不会发生此拦截。因为您以这种方式编写了 js,所以将发生正常的按钮单击操作。这两种情况都应该处理,并且都应该工作 - 这是对javascript的不引人注目的使用。

至于附加到文件,不完全没有。浏览器接收一堆代码,如果可以,它会在当前文档的上下文中运行该代码。然后,它不会将代码保存在任何地方,当它完成时,它将被丢弃,文档将保留在脚本离开时的任何状态。

渲染与respond_to有何关系?它们是并排使用,还是一个优于另一个?

respond_to允许您根据用户发出请求的方式控制如何响应用户。在上面的UJS示例中,这允许您使用一种方法来响应HTML和AJAX请求,但知道其中的区别,并且可以对其响应进行任何需要的更改。

例:

respond_to |format| do
  format.html # will by default render the view with this actions name
  format.json do # lets pass back the object in json format
    render @object.to_json
  end
end

这些都是作为介绍性答案,非常简单,我建议进一步阅读每个主题。

最新更新