将json对象解析为ruby对象时出错

时间:2011-10-04 17:44:40

标签: jquery ruby-on-rails ruby json

我的问题是下一个:

当我尝试用RUBY ON RAILS 3上的'json' gem解析json params时抛出此错误:

 Unexpected token at 

示例

我在ruby中有这个对象:

然后我有这个HTML代码:

<script>
        $("#selected").live('click', function(){
            jQuery.ajax({url: '<%= deselect_all_checkboxes_path %>', data: {contacts: '<%= contacts.to_json %>'}});
        });
</script>

<input type="checkbox" id="selected" value="1" >

我在Rails控制台中尝试此代码

JSON.parse(json_string.gsub(/&quot;/, "\"")) 

工作正常。但是当我尝试这段代码时:

JSON.parse(params[:contacts].gsub(/&quot;/, "\"")) 

gsub方法存在问题。在Rails控制台工作正常,但在我调试时抛出错误消息。问题是“;”字符。

哪个可能是错误?

2 个答案:

答案 0 :(得分:2)

您不希望在jQuery中引用contacts.to_json值,当您希望它成为JavaScript对象文字时,将其转换为字符串;一旦你的数据是一个字符串,它将最终由ERB编码的HTML,你得到你看到的混乱。在你的jQuery中尝试这个:

data: {contacts: <%= contacts.to_json.html_safe %>}

这应该会在jQuery中为您提供一个很好的JavaScript对象文字,当它被发送回您的服务器时将被序列化为JSON对象(而不是JSON字符串)。

答案 1 :(得分:2)

首先取消HTML,然后将其解析为直接JSON:

JSON.parse(CGI.unescapeHTML(params[:contacts]))