Ruby on rails Rails 5错误:XMLHttpRequest.response为null
给定一个只将给定ruby对象转换为JSON的局部视图,Ruby on rails Rails 5错误:XMLHttpRequest.response为null,ruby-on-rails,ajax,xmlhttprequest,ruby-on-rails-5,actionpack,Ruby On Rails,Ajax,Xmlhttprequest,Ruby On Rails 5,Actionpack,给定一个只将给定ruby对象转换为JSON的局部视图,呈现“ajax/object”和呈现JSON:@object不应该提供相同的结果吗 ajax/object.json.erb: <%= @object.to_json %> 因为他们没有 呈现“ajax/object”会导致XMLHttpRequest.response===null并且呈现的视图被发送为:(取自保存的.har文件的片段) 另一方面,render json:@object会导致我预期的行为:XMLHttpRequ
呈现“ajax/object”
和呈现JSON:@object
不应该提供相同的结果吗
ajax/object.json.erb:
<%= @object.to_json %>
因为他们没有
呈现“ajax/object”
会导致XMLHttpRequest.response===null
并且呈现的视图被发送为:(取自保存的.har文件的片段)
另一方面,render json:@object
会导致我预期的行为:XMLHttpRequest.response==(“id”:1)
因此,我的问题是:呈现行为的这种差异是一个bug吗?如果不是,那么
呈现“ajax/object”
的呈现行为的目的是什么?这里的问题是在模板中创建的字符串是HTML转义的
虽然您可以通过以下方式进行修复:
<%= raw( @object.to_json ) %>
首先,使用模板是愚蠢的。Rails必须通过遍历可能的文件树来查找模板,然后必须解析ERB并创建字符串缓冲区等。对于可以通过将对象传递给JSON编码器来处理的事情来说,这是非常低效的 如果你想要一种速度慢的JSON模板语言,那么jBuilder总是有的。谢谢你的回答。我意识到模板效率低下,并打算对其进行更改。我只是不明白为什么它根本不起作用。在网页上将一个对象转换成JSON可能存在巨大的xss漏洞。@贾斯汀·戈登:怎么会这样?如果您只是将数据从控制器传递到视图,并在其上调用
.to_json
,则没有特定的XSS漏洞-您所做的操作与呈现json:@object
完全相同,但方式非常复杂。
"content": {
"size": 18,
"mimeType": "application/json",
"compression": -11,
"text": "{"id":1}"
},
<%= raw( @object.to_json ) %>