레일 3의 JS/ERB 템플릿에서 JSON 처리
JSON 오브젝트 및 jQuery-rails(jQuery 라이브러리 및 특수 rails.js 파일)를 사용하여 Rails(3)와 AJAX 콜을 주고받는 데 문제가 없습니다.
단, 1개의 컨트롤러에서는 AJAX 콜 후에 일부 JSON을 erb 템플릿(create.js.erb)으로 되돌리고 싶습니다.
컨트롤러(@object)의 모든 조합을 시도해 보았습니다.to_json, '[{"content""""hello world"}"] 등) 및 템플릿 자체(JSON.parse(), 작은따옴표, 큰따옴표 등)에서 객체는 계속 렌더링됩니다.
'[{"groups":{},"created_at":"2010-09-21T03:49:34Z" ...
그 결과 jQuery 코드가 해석되지 않아 오류가 발생합니다.
컨트롤러에서 객체를 준비하려면 어떻게 해야 하며 뷰에서 객체를 유효한 JSON 개체로 렌더링하려면 어떤 erb 구문이 필요합니까?
정말 고마워요!
이게 원인인지는 잘 모르겠지만, 또 다른 게임도 해보실 수도 있습니다.html_safe
방법.ERB는 html이 안전하지 않다고 생각하기 때문에 JSON을 탈출하고 있을 수 있습니다.다음 문자열을 사용할 때 이 메서드를 호출해 보십시오.
@object.to_json.html_safe
사용.html_escape
또는raw
XSS에 취약할 수 있습니다.
대신, 의 합리적인 버전을 정의하십시오.json_escape
(일명.k.a.j
도우미:
module ActionView::Base
def json_escape(s)
result = s.to_s.gsub('/', '\/')
s.html_safe? ? result.html_safe : result
end
alias j json_escape
end
다음과 같이 사용합니다.
<script>
var Accounts = new Backbone.Collection;
Accounts.reset(<%=j @accounts.to_json.html_safe %>);
var Projects = new Backbone.Collection;
Projects.reset(<%=j @projects.to_json(:collaborators => true).html_safe %>);
</script>
이름 짓기 충돌이 있음을 유의하십시오.j
에 일가견이 있는.json_escape
ERB:: 용도 및j
에 일가견이 있는.escape_javascript
[ Action View ] :: 도우미:JavaScript Helper.JavaScriptHelper 에일리어스의 이름을 다음과 같이 변경했으면 합니다.js
.
되돌아가다json
다음과 같이 컨트롤러에 렌더링을 기록해야 합니다.
render :json => @object
및 그.to_json
자동으로 호출됩니다.
일부 관계를 포함할 경우 다음을 수행할 수 있습니다.
render :json => @post.to_json(:include => [:comments, :authors])
당신의 json을 렌더링하기 위해 erb를 사용하는 것이 효과가 있을지 모르겠습니다.
컨트롤러로 렌더를 호출할 수 있지만 핸들러에 의한 후속 dom 삽입을 위해 여러 부분을 렌더링해야 할 경우 문제가 발생합니다.여러 html fragment를 해시에 설정할 필요가 있었습니다.이 erb는 위에서 neutrino가 제시한 바와 같이 기본적으로 hash.to_json.safe를 사용하여 프로세스에서 여러 부분을 렌더링할 수 있습니다.
오직.to_json.html_safe
필요한 경우:
> `'<script>'.to_json`
=> "\"\\u003cscript\\u003e\""
작성하는 패치to_json
반응하다html_safe?
및 반환true
자동:
# just use .to_json instead of .to_json.html_safe
ActiveSupport::JSON.class_eval do
class << self
def encode_with_html_safe *args
self.encode_without_html_safe(*args).html_safe
end
alias_method_chain :encode, :html_safe
end
end
언급URL : https://stackoverflow.com/questions/3757457/handling-json-in-js-erb-template-in-rails-3
'programing' 카테고리의 다른 글
중첩된 배열 내에서 일치하는 하위 문서 요소만 반환합니다. (0) | 2023.03.19 |
---|---|
업로드 파일의 최대 크기를 설정하는 방법 (0) | 2023.03.19 |
Angular를 사용하여 객체를 배열에 푸시하는 방법JS (0) | 2023.03.19 |
Spring Boot REST API - 요청 시간 초과? (0) | 2023.03.19 |
Oracle SQL에서의 커스텀 오더 (0) | 2023.03.19 |