2011-10-04 42 views
1

我的问题是下一个:错误而分析JSON对象作为Ruby对象

当我尝试分析JSON PARAMS与'json'宝石上的Ruby on Rails的3抛出这个错误:

Unexpected token at 

我有这样的对象红宝石:

然后,我有这样的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控制台工作正常,但当我调试抛出错误信息。问题在于“;”字符。

这可能是错误?

+0

什么是生产和QUOT版本? – jaydel

+0

@jaydel我正在使用rails,因此我将jQuery函数转换为json。现在我编辑并发布js函数。 – maxiperez

+0

如何使用CGI.unescapeHTML而不是gsub? – Nick

回答

2

UNESCAPE的HTML,然后再分析它直JSON:

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

你不想在你的jQuery中引用你的contacts.to_json值,当你希望它成为一个JavaScript对象字面量时,它会将它变成一个字符串;一旦你的数据是一个字符串,它会以ERB编码的HTML结束,你会看到你看到的混乱。在您的jQuery试试这个:

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

这应该让你一个很好的JavaScript对象字面在你的jQuery和当它发回给你的服务器将被序列化为一个JSON对象(而不是一个JSON字符串)。