【问题标题】:How to render .js.erb template and return JSON data如何渲染 .js.erb 模板并返回 JSON 数据
【发布时间】:2012-06-04 06:52:27
【问题描述】:

我有一些调用 URL mysite.com/articles.js 的 javascript,它向文章控制器的索引操作发送请求。我需要以 JSON 格式将数据返回给 javascript 函数,但在此之前,我想通过渲染 index.js.erb 来更新页面上的一些部分

我通过 jquery 调用 URL

var url = '/articles.js

$.get(url, function(newItemData) {
  someOtherFunction(newItemData)
}

调用带有 .js 结尾的 URL 是否与发送 AJAX 请求不同(远程 => true)?我还有一些其他按钮和链接通过 remote => true 发送 ajax 请求,并且 .js.erb 模板随该请求自动呈现。有没有办法将 URL 作为 ajax 请求调用?

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: jquery ruby-on-rails routing rendering


    【解决方案1】:

    如果我错了,请纠正我,但看起来您正试图从您的控制器呈现两个视图:index.js.erb 文件和 JSON 响应。这是不可能的,因为 Rails 只支持一个 renderredirect_tohead 调用。

    这意味着您需要更改 JavaScript 代码以发送两个请求:一个更新视图(渲染 index.js.erb),另一个返回您的 JSON 对象。

    .js 结束 URL 提交请求与提交 AJAX 请求相同。为此,您需要设置 remote: true,正如您所提到的,或者在您的 JavaScript 代码中构建 AJAX 请求($.ajax(),如果您使用的是 jQuery)。

    你也可以考虑看看Layouts and Rendering in Rails

    希望有帮助!

    【讨论】:

    • 我知道Rails 只支持一个render 或redirect_来调用她的请求,但是返回的JSON 数据和通过.js.erb 模板更新的部分是从同一个数据集构建的。要求两个单独的请求似乎很浪费,这将使数据库检索加倍。有没有更好的方法让我在同一个请求中处理这两个问题?感谢您的快速回复!
    • 不客气!但是,您仍然尝试渲染两个视图(一个 js.erb,一个 .json)。为避免有两个操作,您必须将 JSON 处理移至 .js.erb 视图或将视图更新移至发出请求的 JavaScript 代码表单。
    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多