Почему JavaScript терпит неудачу с синтаксической ошибкой, когда параметр содержит скобки?

0

Я вызываю функцию javascript в onLoad элемента body на одной из моих веб-страниц. Выглядит так:

 <body onLoad="initPage(<%=object.getStringWithBrackets()%>); otherfunction();">

getStringWithBrackets() - это java-функция и возвращает строку следующим образом: "['Name']"

Когда это происходит, возникает синтаксическая ошибка: SyntaxError: syntax error initPage([

И есть небольшая стрелка, указывающая после скобки.

Если я окружаю скрипт одинарными кавычками, маленькая стрелка указывает между одинарными кавычками и скобками: initPage ('[.

Нам не разрешено передавать строки с помощью скобок в качестве параметров?

Редактировать: Спасибо за помощь до сих пор. Это строка html, которая терпит неудачу (я скопировал из источника после запуска ошибки. Я просто изменил имена для другой функции, все остальное не затронуто), я поставил одинарные кавычки назад вокруг скрипта, чтобы показать провал:

<body onLoad="initPage('["Print"]'); otherfunction('param1', 'param2', 'param3', 'param4', 'param5');">

Также хотелось бы упомянуть, что метод java getStringWithBrackets() использует Gson для возврата строки java-строки java List(). Вот как я получаю ["Печать"].

  • 1
    Можете ли вы уточнить , что именно возвращает этот метод? Не используйте кавычки при отображении значения, показывайте действительные символы в возвращаемом значении и ничего больше.
  • 0
    Просмотрите исходный код страницы в браузере, скопируйте и вставьте оскорбительную строку здесь
Показать ещё 1 комментарий
Теги:
scriplets

2 ответа

0
Лучший ответ

Мне кажется, что ваша проблема заключается в том, что вы возвращаетесь буквально "['Name']" и вы интерполируете на значение onLoad, которое само упаковано в одинарные кавычки. Я не могу точно определить, почему вы в конечном итоге получите именно то, что вы говорите, но я предполагаю, что вы не предоставили нам свой точный код javascript и что onLoad завернут в ту же цитату, что и Name (здесь вы показываете одинарные кавычки, где строка заканчивается). Итак, вы в конечном итоге выписываете html, который выглядит так:

Нагрузка становится "initPage ([" (из вашей ошибки, я вижу, что параметр onLoad завершается после [ так что он должен иметь ту же цитату, что и сама строка onLoad), и это, конечно, недействительно javascript.

Конечно, вы можете передавать строки с параметрами как javascript. Вы также можете передавать массивы в качестве параметров. Но вы не можете писать ' и " в выражении javascript, которое само по себе связано с любым из них, если вы не избежите его.

Надеюсь, поможет!

  • 0
    Я думаю, что вы можете быть правы. Я только что обновил свой вопрос. Позвольте мне попытаться сбежать и посмотреть, поможет ли это. Вы бы предложили лучший способ сделать это, кроме как избежать лишних цитат? Это в конечном итоге станет списком различных строк в списке.
  • 0
    Привет, я определенно прав, глядя на ваше хорошо сделанное редактирование выше. Из exerpt onLoad="initPage('["Print"]'); вы можете видеть, что значение onLoad заканчивается на " непосредственно перед Print вызывая как синтаксическую ошибку, так и усеченный javascript. Мой предпочтительный метод заключается в том, чтобы установить переменную в фрагменте неэквотированного javascript (при условии, что он записывается на стороне сервера, установите его как <script>initPageValue='["Print"]'</script> и затем используйте onLoad="initPage(initPageValue)..." - Встроенный JS должен быть сведен к минимуму. Вы также можете подумать, можете ли вы использовать лучший формат, чем '["Print"]'
Показать ещё 1 комментарий
0

Похоже, вам нужно добавить кавычки вокруг строкового значения. Ваш код asp.net вернет строку, но вам нужно, чтобы кавычки вокруг нее обрабатывались как строка в javascript:

<body onLoad="initPage('<%=object.getStringWithBrackets()%>'); otherfunction();">
  • 0
    Я думаю, что функция ожидает массив, или то, что он делает, не имеет большого смысла (по крайней мере, для меня)
  • 0
    да, в любом случае для подтверждения требуется больше информации, поскольку у всех нас разные предположения! Но я, конечно, вижу твою точку зрения.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню