2014-09-23 92 views
0

我想通過ajax調用解析來自我的控制器的json字符串。被解析的json字符串位於js.erb文件中。我將代碼設置爲類似於堆棧溢出的建議:Parsing a JSON string in Ruby。我添加了寶石,但不是簡單地添加代碼,我不得不將<%%>放在代碼的ruby部分,因爲它是一個js.erb文件而不是.rb文件在ruby中解析json字符串

我的完整js.erb文件看起來像這樣:

<% require 'json' %> 

$(document).ready(function() 
{ 


$('#collaboration_user_name').on('keyup', function() { 

    text = $(this).val(); 
    // alert(text); 

    $.ajax({ url: "/collaborations?collaboration="+text, 
    beforeSend: function(xhr) { 
     xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
    } 
    }).done(function(data) { 
    console.log("data:", data); 
    users = JSON.parse(data); 

    $("#user_data ul li").remove(); 
    $.each(users, function(index, value) { 
     $("#user_data ul").append("<li role='presentation'>"+"<a role='menuitem' tabindex='-1' href='#'>"+users[index].name+ ", " +users[index].email+"</a>"+"</li>"); 
    }); 
    <% @user = "data" %>; 
    $("#user_data").append(<%= JSON.parse @user %>); 
}); 

}); 
}); 

需要注意的代碼是

<% require 'json' %> 

在頂部和

<% @user = "data" %>; 
$("#user_data").append(<%= JSON.parse @user %>); 

位於頁面的底部。當我添加這些行時,出現錯誤。

JSON::ParserError in Wikis#edit 
Showing /Users/warren/code/knowledgebank/app/views/layouts/application.html.erb where line #7   raised: 

757: unexpected token at 'data' 
    (in /Users/warren/code/knowledgebank/app/assets/javascripts/collaborations.js.erb) 
    Extracted source (around line #7): 

4<title>Knowledgebank</title> 
5<%= stylesheet_link_tag "application", media: "all" %> 
6 
7<%= javascript_include_tag 'application'%> 
8<%= csrf_meta_tags %> 
9</head> 
10<body> 

如何讓JSON.parse for ruby​​工作?在JavaScript中它工作正常。

+0

' 「數據」'無效'JSON'。 – 2014-09-23 04:04:24

回答

0

什麼你現在正在做的是:

require 'json' 

JSON.parse('data') # which throws unexpected token at 'data' because JSON can't parse the string 'data' 

如果你的目標很簡單,就是追加解析JSON DOM元素,然後我看不出有必要要求JSON和做,在紅寶石?

這個JavaScript應該做的罰款(檢查這個SO answer):

.done(function(data) { 
    $("#user_data").append(JSON.parse(data)); 
} 
+0

我需要它在紅寶石,因爲我想添加ruby的link_to方法來傳遞信息從點擊時,從JSON對象返回到控制器。 – user3266824 2014-09-23 12:16:51