2016-10-21 5 views
0

В приложении рельсы У меня есть объект, определенный в контроллере, содержащий значок и некоторые значения:JSON: Uncaught SyntaxError: отсутствует) после списка аргументов

@data = "<i class='fa fa-circle fa-lg'></i><span>Speed: </span> #{b.speed.to_f} | Time: #{b.gps_date.try(:strftime, '%-m/%e %H:%M')}} <br />".html_safe.to_json 

В связи я анализирую это так:

<script> 
    var data = JSON.parse('<%= raw @data.as_json %>'); 
</script> 

Но я получаю следующее сообщение об ошибке:

Uncaught SyntaxError: missing) after argument list 

Я прекрасно работает, когда я удалить код значок, который содержит S ingle котировки для класса

<i class='fa fa-circle fa-lg'></i> 

Как исправить эту ошибку?

+0

Не решение, а просто интересно узнать, почему вы используете 'to_json' и' as_json'? – Sajan

+0

Я получаю ту же ошибку, если не использую эти методы. Я фактически использую этот объект в JavaScript, поэтому попробовал 'to_json', а затем проанализировал json в JS – Arif

+2

Это не похоже на объект. Я думаю, вы пытаетесь создать узел html и передать его JS, тогда я думаю, что только '' <% = raw @data%> ''должен работать. Ты пробовал ? – Sajan

ответ

1

Вы хотите отправить строку HTML в JS, так что вам нужно to_json, так как это используется для преобразования Hash в JSON. Поэтому просто используйте html_safe на стороне сервера.

И на стороне клиента, поскольку у вас есть весь HTML-код в строке без необходимости as_json, просто используйте строку, как обычно, в JS. as_json - это метод, используемый как Serializer ActiveRecord.

@data = "<i class='fa fa-circle fa-lg'></i><span>Speed: </span> #{b.speed.to_f} | Time: #{b.gps_date.try(:strftime, '%-m/%e %H:%M')}} <br />".html_safe 

и

var data = <%= raw @data %>; 
+0

'var data = <% = raw @data%>' работал для меня. – Arif

+0

Да, я имел в виду это. Не нужно разбирать как JSON, поскольку это строка. Забыл удалить во время публикации :) – Sajan

0

В основном это, кажется, проблема с неэкранированный ' появляются где-то в JSON.parse('...'). Вы можете проверить эту проблему, просмотрев HTML-страницу, на которой отображается эта страница.

Я думаю, что вы могли бы исправить проблему, объявив (нет необходимости для .to_json здесь):

@data = "<i class='fa fa-circle fa-lg'></i><span>Speed: </span> #{b.speed.to_f} | Time: #{b.gps_date.try(:strftime, '%-m/%e %H:%M')}} <br />".html_safe 

, а затем в использовании вид

var data = "<%= escape_javascript @data %>"; 

, как вы только Тринг пропускать string нет необходимости в преобразовании в объект JSON, а затем его разбор. (Это нужно, если вы хотите передать весь Javescript Object/Ruby Hash).

На самом деле для последней строки есть также эквивалентный ярлык/псевдоним:

var data = "<%= j @data %>"; 

PS: Я описал, как исправить неизбежную проблему, но в целом смысл MVC является не имеет (или, по крайней мере минимизировать) логику представления в конроллере. Как правило, было бы предпочтительнее передавать данные в представление и генерировать HTML в шаблоне.

 Смежные вопросы

  • Нет связанных вопросов^_^