Mic*_*man 32 ajax jquery json ruby-on-rails erb
使用JSON对象和jQuery-rails(jQuery库加上特殊的rails.js文件)进行Rails(3)的典型AJAX调用没有任何问题.
但是,在一个控制器中,我想在AJAX调用之后在erb模板(create.js.erb)中返回一些JSON.
我已经尝试了控制器中的每一个组合(@ object.to_json,'[{"content":"hello world"}]'等等)和模板本身(JSON.parse(),单引号,双引号等),但对象继续这样渲染:
'[{"groups":{},"created_at":"2010-09-21T03:49:34Z" ...
Run Code Online (Sandbox Code Playgroud)
结果,我的jQuery代码无法解析它,我得到错误.
我如何在控制器中准备我的对象,以及在视图中我需要什么erb语法才能呈现为有效的JSON对象?
非常感谢!
ale*_*dev 54
我不确定这是原因,但你也可以尝试使用html_safe
方法.ERB可能正在逃避您的JSON,因为它认为它不是html安全的.尝试在使用字符串时调用该方法:
@object.to_json.html_safe
Run Code Online (Sandbox Code Playgroud)
Joh*_*ohn 32
使用html_escape
或raw
单独使用会使您容易受到XSS攻击.
相反,定义json_escape
(又名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
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
<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>
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此帖子.
要知道,有一个命名冲突之间j
化名为json_escape
在ERB ::的Util并j
化名为escape_javascript
在::的ActionView ::助手JavaScriptHelper.我希望将JavaScriptHelper别名重命名为js
.