2011-10-04 60 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字符串)。