26.09.2023, 16:58
|
Интересующийся
|
|
Регистрация: 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"
}
Т.е. это не результат выполнения функции, а то что эта функция получает при выборе пункта выдачи в виджете.
|
|
26.09.2023, 17:00
|
Интересующийся
|
|
Регистрация: 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
}, "*")
}
|
|
26.09.2023, 17:00
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Где у вас в коде блок, в который должен выводиться ответ? Тот самый контейнер, который берется по
const paramsContainer = document.querySelector('.map__params');
|
|
26.09.2023, 17:03
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Сообщение от Вадим2019
|
виджет передает в функцию это
|
Виджет передает это в функцию, как параметр data
А почему у вас
document.getElementById('paramValue').innerHTML = data[indexTo];
вне функции?
Вне функции никакой data не существует
|
|
26.09.2023, 17:05
|
Интересующийся
|
|
Регистрация: 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>
|
|
26.09.2023, 17:06
|
Интересующийся
|
|
Регистрация: 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>
|
|
26.09.2023, 17:07
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Сообщение от Вадим2019
|
я так понимаю тут
|
ТУТ нет элемента с классом map__params!
Вы вообще то знаете, что такое querySelector?
|
|
26.09.2023, 17:07
|
Интересующийся
|
|
Регистрация: 26.09.2023
Сообщений: 11
|
|
При выборе пункта выдачи в виджете консоль ругается на эту строку
paramsContainer.innerHTML = '';
TypeError: Cannot set properties of null (setting 'innerHTML')
|
|
26.09.2023, 17:14
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Еще раз гово
Сообщение от Вадим2019
|
Cannot set properties of null (setting 'innerHTML')
|
Сами на русский перевести можете?
Еще раз говорю.
document.querySelector('.map__params') - ищет элемент с классом map__params.
Какой нибудь <div class="map__params">
Если его нет, то возвращается null
|
|
26.09.2023, 17:30
|
Интересующийся
|
|
Регистрация: 26.09.2023
Сообщений: 11
|
|
ОООО, спасибо огромное, вставил <div class="map__params"></div> и все заработало!!!
|
|
|
|