1

与えられたルビオブジェクトを単にJSONに変換する部分的なビューがある場合、render 'ajax/object'render json: @objectは同じ結果をもたらすべきではありませんか?Rails 5エラー:XMLHttpRequest.responseがnull

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

ここで問題となるのは、テンプレートで作成された文字列がHTMLでエスケープされていることです。

あなたがそれを修正することもできますが:テンプレートを使用して

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

最初の場所で愚かで愚かです。 Railsは可能なファイルのツリーを走査してテンプレートを検索し、ERBを解析して文字列バッファなどを作成する必要があります。これは、オブジェクトをJSONエンコーダに渡すことによって処理できるものに対して、非常に非効率的です。

+0

遅いJSONテンプレート言語が必要な場合は、常にjBuilderがあります。 – max

+0

あなたの答えをありがとう。私はテンプレートが非効率であり、それを変更しようとしていることに気付きました。なぜそれが全く動かなかったのか分かりませんでした。 –

+0

Webページ上のオブジェクトをJSONに変換するだけで、巨大なxssの脆弱性が存在します。 – justingordon