1

주어진 루비 객체를 JSON으로 변환하는 부분 뷰가 있다면 render 'ajax/object'render json: @object은 같은 결과를 제공하지 않아야합니까?레일 5 오류 : XMLHttpRequest.response is null

아약스/object.json.erb :

<%= @object.to_json %> 

@object :

{&quot;id&quot;:1} 

그렇지 않은 때문입니다.

render 'ajax/object'XMLHttpRequest.response === null 결과 및 렌더링 된 뷰는 다음과 같이 전송되는 : 다른 한편으로는,

render json: @object

 "content": { 
     "size": 18, 
     "mimeType": "application/json", 
     "compression": -11, 
     "text": "{&quot;id&quot;:1}" 
     }, 
(저장 .har 파일에서 가져온 코드 조각), 동작의 결과는 내가 예상 : XMLHttpRequest.response === ("id": 1)

제 질문은 : 렌더링 동작의 차이가 버그이며, 그렇지 않다면 render 'ajax/object'의 렌더링 동작의 목적은 무엇입니까?

답변

1

여기에서 템플릿에서 생성 된 문자열은 HTML 이스케이프 처리됩니다.

당신이 고칠 수 있지만 :

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

템플릿은 처음에 바보 바보 사용. Rails는 가능한 파일 트리를 탐색하여 템플릿을 조회 한 다음 ERB를 구문 분석하고 문자열 버퍼 등을 만들어야합니다. 이는 JSON 인코더로 객체를 전달하여 처리 할 수있는 무언가에 대해 엄청나게 비효율적입니다.

+0

느린 JSON 템플릿 언어를 원할 경우 항상 jBuilder가 있습니다. – max

+0

답변 해 주셔서 감사합니다. 템플릿이 비효율적이었고 템플릿을 변경하려고했습니다. 나는 왜 그것이 전혀 작동하지 않았는지 이해하지 못했습니다. –

+0

웹 페이지의 JSON으로 개체를 변환하는 것만으로도 큰 xss 취약점이 발생할 수 있습니다. – justingordon