Я вызываю функцию 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(). Вот как я получаю ["Печать"].
Мне кажется, что ваша проблема заключается в том, что вы возвращаетесь буквально "['Name']"
и вы интерполируете на значение onLoad, которое само упаковано в одинарные кавычки. Я не могу точно определить, почему вы в конечном итоге получите именно то, что вы говорите, но я предполагаю, что вы не предоставили нам свой точный код javascript и что onLoad завернут в ту же цитату, что и Name
(здесь вы показываете одинарные кавычки, где строка заканчивается). Итак, вы в конечном итоге выписываете html, который выглядит так:
Нагрузка становится "initPage ([" (из вашей ошибки, я вижу, что параметр onLoad завершается после [
так что он должен иметь ту же цитату, что и сама строка onLoad), и это, конечно, недействительно javascript.
Конечно, вы можете передавать строки с параметрами как javascript. Вы также можете передавать массивы в качестве параметров. Но вы не можете писать '
и "
в выражении javascript, которое само по себе связано с любым из них, если вы не избежите его.
Надеюсь, поможет!
onLoad="initPage('["Print"]');
вы можете видеть, что значение onLoad заканчивается на "
непосредственно перед Print
вызывая как синтаксическую ошибку, так и усеченный javascript. Мой предпочтительный метод заключается в том, чтобы установить переменную в фрагменте неэквотированного javascript (при условии, что он записывается на стороне сервера, установите его как <script>initPageValue='["Print"]'</script>
и затем используйте onLoad="initPage(initPageValue)..."
- Встроенный JS должен быть сведен к минимуму. Вы также можете подумать, можете ли вы использовать лучший формат, чем '["Print"]'
Похоже, вам нужно добавить кавычки вокруг строкового значения. Ваш код asp.net вернет строку, но вам нужно, чтобы кавычки вокруг нее обрабатывались как строка в javascript:
<body onLoad="initPage('<%=object.getStringWithBrackets()%>'); otherfunction();">