Я пытаюсь проанализировать строку json, исходящую от моего контроллера, через вызов ajax. Исправленная строка json находится в файле js.erb. Я установил свой код так же, как это предложение: анализ строки JSON в Ruby. Я добавил драгоценный камень. Однако вместо простого добавления кода мне пришлось помещать <%%> вокруг рубиновой части кода, потому что это файл js.erb, а не файл.rb
мой полный файл 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 для работы ruby? В javascript он работает нормально.
Теперь вы делаете следующее:
require 'json'
JSON.parse('data') # which throws unexpected token at 'data' because JSON can't parse the string 'data'
Если ваша цель - просто добавить обработанный json к элементу dom, тогда я не вижу необходимости требовать JSON и делать это в рубине?
Этот javascript должен делать все правильно (проверьте этот ответ SO):
.done(function(data) {
$("#user_data").append(JSON.parse(data));
}
"data"
не действительны вJSON
.