рендеринг многострочного Javascript с использованием JSONP в рельсах - PullRequest
2 голосов
/ 03 августа 2010

В контроллере я пытаюсь сделать объявление Google javascript, чтобы распечатать его в некоторый HTML, используя JSONP, как это

<script type="text/javascript"><!--
google_ad_client = "pub-23222424";
google_alternate_color = "FFFFFF";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript"
  src="http://pagead2.google.com/pgad/show_ads.js">
</script>

Итак, я делаю:

render :text "var s_response = { content: '<script type=\"text/javascript\"><!--\\ngoogle_ad_client = \"pub-23222424\";\\ngoogle_alternate_color = \"FFFFFF\";\\ngoogle_ad_width = 468;\\ngoogle_ad_height = 60;\\n//--><\\/script>\\n<script type=\"text/javascript\"\\n  src=\"http://pagead2.google.com/pgad/show_ads.js\">\\n<\\/script>', id: '2'};">

Но я получаю эту ошибку:

неопределенный строковый литерал

[Break on this error] var response = { content: '<script type="text/javascript"><!-- 

=> Кажется, это проблема многоканальных линий, верно? Но я не знаю, как решить эту проблему.

Спасибо

Lucas

Ответы [ 3 ]

0 голосов
/ 03 августа 2010

Напишите огромные строки, как в моем примере ниже, и перестаньте их экранировать:

render :text => %{ 
    <script type="text/javascript">
    //<!--
    google_ad_client = "pub-23222424";
    google_alternate_color = "FFFFFF";
    google_ad_width = 468;
    google_ad_height = 60;
    //-->
    </script>
    <script type="text/javascript" 
            src="http://pagead2.google.com/pgad/show_ads.js">
    </script> }
0 голосов
/ 03 августа 2010

Спасибо за ваши ответы!

Марсель> Проблема в том, что, если я избавлюсь от символов новой строки, мое объявление больше не будет отображаться, я попробую его "вручную". Поэтому мне может понадобиться заменить символы "/ n" перед отправкой ответа чем-то вроде уникальной строки и заменить их снова после получения ответа сервером?

floatless> Первоначально я не избежал ответа, и он не работал. Поэтому я не думаю, что это что-то изменит, но все равно спасибо.

0 голосов
/ 03 августа 2010

В JavaScript вы не можете распределить строку по нескольким строкам.

В этом случае вы можете пропустить эти комментарии, чтобы вы могли поместить все в одну строку и избавиться от символов новой строки (\n).

Кстати, действительный ответ JSON будет окружать каждую строку, независимо от того, представляет ли она ключ или значение, двойными кавычками.Также см. JSONLint FAQ:

Правильный формат для коллекции: { "key": "value" }

В итоге вы получите:

render :text "var s_response = { \"content\": \"<script type='text/javascript'>google_ad_client = 'pub-23222424';google_alternate_color = 'FFFFFF';google_ad_width = 468;google_ad_height = 60;<\\/script><script type='text/javascript' src='http://pagead2.google.com/pgad/show_ads.js'><\\/script>\", \"id\": \"2\"};">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...