Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 26.09.2023, 16:58
Интересующийся
Отправить личное сообщение для Вадим2019 Посмотреть профиль Найти все сообщения от Вадим2019
 
Регистрация: 26.09.2023
Сообщений: 11

Запутался уже...
виджет передает в функцию это

{
  "addressTo": "ул Советская",
  "areaTo": null,
  "boxSize": "m",
  "cashOfDelivery": 26400,
  "cityTo": "г Ростов-на-Дону",
  "deliveryDescription": {
    "description": "от 1 до 2 дней + обработка заказа 10 часов",
    "values": {
      "deliveryMax": 2,
      "deliveryMin": 1,
      "extraTimeInHours": 10
    }
  },
  "indexTo": "344019",
  "mailType": "POSTAL_PARCEL",
  "pvzType": "russian_post",
  "id": 44342,
  "regionTo": "обл Ростовская",
  "sumoc": "150000",
  "weight": "1000"
}


Т.е. это не результат выполнения функции, а то что эта функция получает при выборе пункта выдачи в виджете.
Ответить с цитированием
  #12 (permalink)  
Старый 26.09.2023, 17:00
Интересующийся
Отправить личное сообщение для Вадим2019 Посмотреть профиль Найти все сообщения от Вадим2019
 
Регистрация: 26.09.2023
Сообщений: 11

все должно быть определенно в самом коде виджета на стороне почты
function ecomStartWidget(t) {
  const e = document.createElement("iframe");
  e.setAttribute("allowtransparency", "true"), e.setAttribute("scroll", "false"), e.setAttribute("frameborder", "0"), e.setAttribute("width", "100%"), e.setAttribute("height", "100%"), e.setAttribute("id", "mapIframe"), e.src = "https://widget.pochta.ru/map/";
  const a = document.getElementById(t.containerId);
  !document.querySelector("#mapIframe") && a && a.appendChild(e);
  const n = a => {
    if (a.data && a.data.isMapLoad) try {
      e.contentWindow.postMessage({
        postData: {
          siteId: t && t.id,
          accountId: t && t.accountId,
          accountType: t && t.accountType,
          weight: t && t.weight,
          sumoc: t && t.sumoc,
          startZip: t && t.startZip,
          startAddress: t && t.start_location,
          url: window.location.href,
          dimensions: t && t.dimensions
        }
      }, "*")
    } catch (t) {
      window.removeEventListener("message", n)
    }
    a.data.pvzData && (t.callbackFunction ? t.callbackFunction(a.data.pvzData) : console.error("Ошибка вызова callback функции. Указанная функция не найдена."))
  };
  window.addEventListener("message", n)
}

function resetSelectedPlacemarkInEcomWidget() {
  const t = document.getElementById("mapIframe");
  t && t.contentWindow && t.contentWindow.postMessage({
    resetSelectedPlacemark: !0
  }, "*")
}
Ответить с цитированием
  #13 (permalink)  
Старый 26.09.2023, 17:00
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Где у вас в коде блок, в который должен выводиться ответ? Тот самый контейнер, который берется по
const paramsContainer = document.querySelector('.map__params');
Ответить с цитированием
  #14 (permalink)  
Старый 26.09.2023, 17:03
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от Вадим2019
виджет передает в функцию это
Виджет передает это в функцию, как параметр data
А почему у вас
document.getElementById('paramValue').innerHTML = data[indexTo];
вне функции?
Вне функции никакой data не существует
Ответить с цитированием
  #15 (permalink)  
Старый 26.09.2023, 17:05
Интересующийся
Отправить личное сообщение для Вадим2019 Посмотреть профиль Найти все сообщения от Вадим2019
 
Регистрация: 26.09.2023
Сообщений: 11

Сообщение от voraa Посмотреть сообщение
Где у вас в коде блок, в который должен выводиться ответ? Тот самый контейнер, который берется по
const paramsContainer = document.querySelector('.map__params');
я так понимаю тут

<div id="forpvzrp" style="display: none;">
<div id="ecom-widget" style="height: 500px;">
<script src="https://widget.pochta.ru/map/widget/widget.js" type="text/javascript"></script><script type="text/javascript">// <![CDATA[
    ecomStartWidget({
      id: 0000,
     callbackFunction: callbackFunction,
      containerId: 'ecom-widget'
    });
// ]]></script></div>
Ответить с цитированием
  #16 (permalink)  
Старый 26.09.2023, 17:06
Интересующийся
Отправить личное сообщение для Вадим2019 Посмотреть профиль Найти все сообщения от Вадим2019
 
Регистрация: 26.09.2023
Сообщений: 11

Сообщение от voraa Посмотреть сообщение
Виджет передает это в функцию, как параметр data
А почему у вас
document.getElementById('paramValue').innerHTML = data[indexTo];
вне функции?
Вне функции никакой data не существует
Переместил... но так тоже не отображается..

<script>
function callbackFunction(data) {
  const paramsContainer = document.querySelector('.map__params');

  paramsContainer.innerHTML = '';

  for (const key in data) {
    const param = document.createElement('div');
    const paramValue = document.createElement('span');
	
    param.className = 'map__params-item';
    param.textContent = `${key}: `;

    paramValue.textContent = typeof data[key] === 'object' ? JSON.stringify(data[key]) : data[key];

    param.appendChild(paramValue);
    paramsContainer.appendChild(param);
	


  }
  
 document.getElementById('paramValue').innerHTML = data.addressTo;
}

	
 
  
</script>
Ответить с цитированием
  #17 (permalink)  
Старый 26.09.2023, 17:07
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от Вадим2019
я так понимаю тут
ТУТ нет элемента с классом map__params!
Вы вообще то знаете, что такое querySelector?
Ответить с цитированием
  #18 (permalink)  
Старый 26.09.2023, 17:07
Интересующийся
Отправить личное сообщение для Вадим2019 Посмотреть профиль Найти все сообщения от Вадим2019
 
Регистрация: 26.09.2023
Сообщений: 11

При выборе пункта выдачи в виджете консоль ругается на эту строку
paramsContainer.innerHTML = '';
TypeError: Cannot set properties of null (setting 'innerHTML')
Ответить с цитированием
  #19 (permalink)  
Старый 26.09.2023, 17:14
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Еще раз гово
Сообщение от Вадим2019
Cannot set properties of null (setting 'innerHTML')
Сами на русский перевести можете?
Еще раз говорю.
document.querySelector('.map__params') - ищет элемент с классом map__params.
Какой нибудь <div class="map__params">
Если его нет, то возвращается null
Ответить с цитированием
  #20 (permalink)  
Старый 26.09.2023, 17:30
Интересующийся
Отправить личное сообщение для Вадим2019 Посмотреть профиль Найти все сообщения от Вадим2019
 
Регистрация: 26.09.2023
Сообщений: 11

ОООО, спасибо огромное, вставил <div class="map__params"></div> и все заработало!!!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод width и height у div при изменении его размера zhsv007 Events/DOM/Window 3 04.04.2022 17:22
Получение результата функции Artur_Hopf Общие вопросы Javascript 2 03.05.2018 16:06
Вывод из div в input value динамически? dwib Общие вопросы Javascript 1 29.10.2017 19:42
Вывод нескольких переменных с функции SnowyWolf Общие вопросы Javascript 10 23.04.2014 14:34
Вывод значений таймера в div Tylmaril (X)HTML/CSS 7 21.07.2013 16:47