【问题标题】:Rails 5 error: XMLHttpRequest.response is nullRails 5 错误:XMLHttpRequest.response 为空
【发布时间】:2017-01-13 22:39:09
【问题描述】:

假设一个部分视图只是将给定的 ruby​​ 对象转换为 JSON,render 'ajax/object'render json: @object 不应该提供相同的结果吗?

ajax/object.json.erb:

<%= @object.to_json %>

@对象:

{&quot;id&quot;:1}

因为他们没有。

render 'ajax/object' 导致XMLHttpRequest.response === null 和渲染视图被发送为:(摘自保存的 .har 文件的片段)

      "content": {
        "size": 18,
        "mimeType": "application/json",
        "compression": -11,
        "text": "{&quot;id&quot;:1}"
      },

另一方面,render json: @object 会导致我预期的行为:XMLHttpRequest.response === ("id": 1)

所以我的问题是:这种渲染行为的差异是否是一个错误,如果不是,render 'ajax/object' 的渲染行为的目的是什么?

【问题讨论】:

    标签: ruby-on-rails ajax xmlhttprequest ruby-on-rails-5 actionpack


    【解决方案1】:

    这里的问题是模板中创建的字符串是 HTML 转义的。

    虽然您可以使用以下方法修复它:

    <%= raw( @object.to_json ) %>
    

    首先使用模板既愚蠢又愚蠢。 Rails 必须通过遍历可能的文件树来查找模板,然后必须解析 ERB 并创建字符串缓冲区等。这对于可以通过将对象传递给 JSON 编码器来处理的事情来说效率非常低。

    【讨论】:

    • 如果你想要一种慢速的 JSON 模板语言,总有 jBuilder。
    • 感谢您的回答。我意识到该模板效率低下,并打算对其进行更改。我只是不明白为什么它根本不起作用。
    • 在网页上仅将对象转换为 JSON 可能存在巨大的 xss 漏洞。
    • @justingordon 怎么会这样?如果您只是将数据从控制器传递到视图并在其上调用 .to_json,则没有特定的 XSS 漏洞 - 您正在做与 render json: @object 完全相同的事情,但方式非常复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多