Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 5错误:XMLHttpRequest.response为null_Ruby On Rails_Ajax_Xmlhttprequest_Ruby On Rails 5_Actionpack - Fatal编程技术网

Ruby on rails Rails 5错误:XMLHttpRequest.response为null

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

给定一个只将给定ruby对象转换为JSON的局部视图,
呈现“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": "{&quot;id&quot;:1}"
      },
<%= raw( @object.to_json ) %>