Rails 5错误:XMLHttpRequest.response为null

时间:2017-01-13 22:39:09

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

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

AJAX / object.json.erb:

<%= @object.to_json %>

@object:

{&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'渲染行为的目的是什么?

1 个答案:

答案 0 :(得分:1)

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

虽然您可以通过以下方式修复它:

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

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