строка, имеющаявыдает неопределенную строковую литеральную ошибку js - PullRequest
3 голосов
/ 28 января 2011

Я извлекаю некоторые данные из базы данных и отображаю их в текстовой области с помощью jquery следующим образом. $('#textareatest').val('<% =teststring %>'). Возможно, строка 'teststring' может содержать разрывы строк XHTML (<br/>). Всякий раз, когда строка содержит <br/> Я получаю ошибку 'unterminated string literal'. Я видел несколько сообщений, рассматривающих '\ n 'как разрывы строк и предложение убежать от него. Я пытался сбежать <br/> аналогично, но это не сработало.

Может ли кто-нибудь помочь мне с этим?

ОБНОВЛЕНИЕ: : Я уже избежал одинарных кавычек. Вот пример строки тестовая строка <br />

Спасибо.

Ответы [ 4 ]

2 голосов
/ 28 января 2011

Вполне возможно, что если teststring содержит разрыв строки ("\n"), это вызовет такую ​​ошибку, потому что движок JavaScript будет видеть это как

$("#textareatest").val('Some random text
then an unexpected linebreak');

Я бы порекомендовал либо обеспечить, чтобы teststring не содержал разрыв строки, либо избежать его.

Также возможно, что если teststring содержит какие-либо одинарные кавычки, он завершит строку:

$("#textareatest").val('Some random test's but that single quote kills the string');
0 голосов
/ 29 января 2011

Это может быть немного излишним, но просто для проверки:

$('#textareatest').val(decodeURI('<% =System.Uri.EscapeUriString(teststring) %>'))

работает?

Это закодирует всю строку для использования в URL-адресах и позволит javascript декодировать ее,Это не очень эффективно, но довольно безопасно (так как набор символов, разрешенных в URI, довольно мал).

0 голосов
/ 28 января 2011

Очень помогло бы увидеть реальный пример, но это будет что-то глупое и раздражающее. Я предполагаю, что вы будете смешивать одинарные и двойные кавычки в своем коде таким образом, чтобы при построении строки получился непревзойденный внешний набор.

Обновление

Ну, если это именно та строка, которую вы отправляете, то это не проблема - в строковом литерале нет ничего такого, что может быть проблемой, поэтому вы должны ошибиться - ошибки нет.

Предполагая, что код не работает даже после того, как я сказал вам об этом, вам, вероятно, нужно взглянуть глубже.

Послушайте, сообщение об ошибке довольно ясно - у вас есть что-то, что начинается синтаксически как строковый литерал, но где интерпретатор не может найти конец. Там действительно только один синтаксис для строковых литералов, чтобы процитировать:

Строковый литерал равен нулю или больше. символы, заключенные в двойные (") или одинарные (') кавычки. Строка должен быть отделен кавычками того же типа; то есть либо оба одинарные кавычки или двойные кавычки. Следующие примеры строковых литералов:

"бла" "бла" "1234" "одна строка \ n Еще одна строка "В дополнение к обычным символы, вы также можете включить специальные символы в строках, как показано в последнем элементе в предыдущий список. Следующая таблица перечисляет специальные символы, которые вы можно использовать в строках JavaScript. Значение символа \ b backspace \ f form feed \ n новая строка \ r возврат каретки \ t tab \ символ обратной косой черты

4.5. Экранирующие персонажи

Для символов, не перечисленных в предыдущая таблица, предыдущая обратная косая черта игнорируется, за исключением кавычка и обратный слеш сам персонаж.

Вы можете вставить кавычки внутри строки, предшествуя им с обратная косая черта. Это известно как побег кавычки. Например,

var quote = "Он прочитал \" Кремацию Сэма МакГи \ "Р.У. Сервисом". document.write (цитата)

Результатом этого будет

Он прочитал "Кремация Сэма МакГи" Р. В. Сервис. Чтобы включить буквальный обратная косая черта внутри строки, вы должны избежать символа обратной косой черты. За Например, чтобы назначить путь к файлу c: \ temp для строки, используйте следующее:

var home = "c: \ temp"

На этом этапе вам нужно сделать хотя бы одну из двух вещей:

  • внимательно прочитайте код или, еще лучше, покачивайтесь по коду с кем-то еще, ищите ошибочную одинарную или двойную кавычку

  • вставьте в ваш код операторы console.log, чтобы сузить место возникновения ошибки.

Самое важное, что нужно помнить, это то, что парсер всегда прав - даже если вы думаете, что он неправильный, он все же прав, потому что вы не можете договориться с парсером.

0 голосов
/ 28 января 2011

Вы должны закодировать HTML-строку, поэтому <br/> становится:

&lt;br/&gt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...