javascript - Rails - 格式和渲染 - 它们如何工作?

标签 javascript ruby-on-rails ruby json ujs

据我了解,调用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/

相关文章:

javascript - jQuery "on click"中可以包含多个 ID 吗?

javascript - 如何为每个 div 创建叠加层

ruby-on-rails - 如何在 Stripe (Rails) 中创建费用和客户

Ruby:使用变量的动态绑定(bind)评估字符串

javascript - 为什么需要使用 Object.create()

javascript - 使用 jQuery 显示/隐藏循环中生成的具有特定类和 id 的表行

Javascript 函数定义说明

ruby-on-rails - ActiveRecord getter 中断验证

ruby-on-rails - 如何使用 Ruby 2.7.0 修复 Rails 的警告消息

ruby - Chef 模板 - 时间戳