Rails 5 error: XMLHttpRequest.response is null
Rails 5 error: XMLHttpRequest.response is null
如果部分视图只是将给定的 ruby 对象转换为 JSON,render 'ajax/object'
和 render json: @object
不应该提供相同的结果吗?
ajax/object.json.erb:
<%= @object.to_json %>
@object:
{"id":1}
因为他们没有。
render 'ajax/object'
导致 XMLHttpRequest.response === null
并且呈现的视图被发送为:(摘自保存的 .har 文件的片段)
"content": {
"size": 18,
"mimeType": "application/json",
"compression": -11,
"text": "{"id":1}"
},
另一方面,render json: @object
会导致我预期的行为:XMLHttpRequest.response === ("id": 1)
所以我的问题是:渲染行为的这种差异是否是一个错误,如果不是,render 'ajax/object'
的渲染行为的目的是什么?
这里的问题是在模板中创建的字符串被HTML转义。
虽然您可以通过以下方法修复它:
<%= raw( @object.to_json ) %>
首先使用模板是愚蠢的。 Rails 必须通过遍历可能的文件树来查找模板,然后必须解析 ERB 并创建字符串缓冲区等。对于可以通过将对象传递给 JSON编码器。
如果部分视图只是将给定的 ruby 对象转换为 JSON,render 'ajax/object'
和 render json: @object
不应该提供相同的结果吗?
ajax/object.json.erb:
<%= @object.to_json %>
@object:
{"id":1}
因为他们没有。
render 'ajax/object'
导致 XMLHttpRequest.response === null
并且呈现的视图被发送为:(摘自保存的 .har 文件的片段)
"content": {
"size": 18,
"mimeType": "application/json",
"compression": -11,
"text": "{"id":1}"
},
另一方面,render json: @object
会导致我预期的行为:XMLHttpRequest.response === ("id": 1)
所以我的问题是:渲染行为的这种差异是否是一个错误,如果不是,render 'ajax/object'
的渲染行为的目的是什么?
这里的问题是在模板中创建的字符串被HTML转义。
虽然您可以通过以下方法修复它:
<%= raw( @object.to_json ) %>
首先使用模板是愚蠢的。 Rails 必须通过遍历可能的文件树来查找模板,然后必须解析 ERB 并创建字符串缓冲区等。对于可以通过将对象传递给 JSON编码器。