Неперехваченная ошибка ссылки my() не определена

<input type = "button" class = "btn" value = "Place Order" onclick = "my()">


<script type = "text/javascript">

  <% String resp= session.getAttribute("jsonData").toString();%>
  const jso = "<%=resp%>"
function my(){

    alert(jso);


  }




</script>

Я хочу получить переменную JSP и сохранить ее в javascript и показать в предупреждении, но когда я делаю это, моя функция возврата функции onclick не определена.

Щелкните правой кнопкой мыши веб-страницу, выберите «Просмотр исходного кода» и вставьте соответствующие части вместо JSP.

mplungjan 28.12.2022 11:01

Я рекомендую вам дать кнопке идентификатор и сделать window.addEventListener("DOMContentLoaded", () => { const jso = "<%=resp%>"; document.getElementById("myButton").addEventListener("click"‌​, (e) => { alert(jso); }); }) и удалить встроенный обработчик событий.

mplungjan 28.12.2022 11:03

mplungjan теперь ничего не показывает в консоли.

Naved Ahmed 28.12.2022 11:25

Какая консоль? Вы предупреждаете вещи. Если хотите в консоли, используйте console.info и если не получится, то скорее всего будет ошибка

mplungjan 28.12.2022 11:39

mplungjan в консоли ничего не показывает, кроме предупреждений и ошибок.

Naved Ahmed 28.12.2022 11:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это должно работать. Если нет, то происходит что-то еще

Здесь я не добавляю

<% String resp= session.getAttribute("jsonData").toString();%>

по понятным причинам

window.addEventListener("DOMContentLoaded", () => {
  const jso = "<%=resp%>";
  document.getElementById("myButton").addEventListener("click", (e) => {
    alert(jso);
  });
})
<input type = "button" id = "myButton" class = "btn" value = "Place Order">
Ответ принят как подходящий

У вас, вероятно, есть ошибка JavaScript в этой строке: const jso = "<%=resp%>"

resp происходит от атрибута с именем jsonData, поэтому я предполагаю, что он содержит JSON. Свойства и строковые значения в JSON заключены в двойные кавычки. В следующем небольшом примере уже показана ошибка, которую, как я ожидаю, вы получите:

const jso = "{"key": "value"}"

Открытие " закрывается не последним ", а первым в вашем JSON. Другими словами, вы выводите недопустимый JavaScript.

Лучшее решение — правильно экранировать JSON. Я рекомендую использовать Apache Commons Text 1.10.0. При правильном импорте:

const jso = "<%=StringEscapeUtils.escapeJson(resp)%>"

Это правильно экранирует любые небезопасные символы, включая ", в resp перед его выводом.

Это работает как шарм, большое спасибо. Мне нужна небольшая помощь от вас, как я могу снова преобразовать этот jso в JSON

Naved Ahmed 28.12.2022 15:22

var response=JSON.parse(resp) // Это работает нормально console.info(response) response.json().then(data => { //заказ сгенерирован успешно console.info(data) InitialClientModule(data) }) .catch(error => { console.info(error) alert("ошибка инициирования платежа") }) но это выдает ошибку responses.jsp:19 Uncaught TypeError: response.json не является функцией в моем (responses.jsp: 19:14) в HTMLInputElement.onclick (responses.jsp:10:83) что мне делать?

Naved Ahmed 28.12.2022 15:32

Другие вопросы по теме