据我了解,调用render
将向浏览器返回响应。它可以返回不同类型的内容(html、json、js 等)。然而,我对浏览器之后的行为有点困惑。
如果响应是 html,浏览器只渲染页面。如果响应是 json,通常客户端 js 代码会获取 json 响应并用它做一些有用的事情。如果响应是js,浏览器会做什么?不知道这个js是否被追加到文档中并执行?这与 Rails UJS 有关吗?
另外,render 与 respond_to 有何关系?它们是并排使用,还是优先使用其中一个?
render html:
render js:
render json:
respond_to |format| do
format.html
format.js
format.json
end
很抱歉,如果这看起来有很多问题,但我认为如果将这些问题放在一起讨论将会有所帮助。
最佳答案
If the response is js, what would the browser do?
这完全取决于浏览器和用户的 JavaScript 环境。您的应用程序返回 js,浏览器将以它认为最好的方式处理它。
I am not sure if this js is appended to the document and executed? Is this related to Rails UJS?
UJS 更多的是确保即使用户浏览器不处理 JavaScript,应用程序也能正常工作。例如,您编写脚本来拦截按钮单击事件并取消单击操作,而不是执行其他操作,例如 AJAX 调用。 如果用户禁用了 javascript,则不会发生此拦截。因为你已经这样编写了 js,所以会发生正常的按钮单击操作。这两种情况都应该得到处理并且都应该有效 - 这就是 JavaScript 的不引人注目的使用。
至于附加到文档中,不完全不是。浏览器接收一堆代码,如果可以的话,它会在当前文档的上下文中运行该代码。然后它不会将代码保存在任何地方,当它完成时,它会被丢弃,并且文档将保持脚本留下的任何状态。
how is render related to respond_to? Are they used side by side, or is one preferred over the other?
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
这些都是介绍性的答案,而且非常简单,我建议进一步阅读每个主题。
关于javascript - Rails - 格式和渲染 - 它们如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36768721/