I've tried everything. Every combination of the helpers raw
, html_safe
to_json
including some attempts with ::JSON.encode
and CGI.unescape
. The issue is that regardless of what I do, I can't print well-formed JSON in a view. It's always HTML escaped.
Here's the code in my view:
var campaignData<%= "=" + (raw @campaign.to_json) if @campaign %>;
In my case, it's always the quotes that are escaped as ". I would just do a gsub on the quotes, but that is a terrible solution to what IMO ought to be a very simple, well documented use case.
The problem here is with the "=" string. As it's considered unsafe, it taints the other string.
You can probably do either:
raw("=" + @campaign.to_json)
or
"= #{@campaign.to_json}".html_safe
which are roughly the same.
Since ActiveSupport 2.3.3 you have been able to do .as_json
Did you try escape_javascript
?
Here is an example from the *.haml file, which I just added to test my answer.
:javascript
var foo=$.parseJSON("#{j @albums.to_json}")
Where j
is an short alias for escape_javascript
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With