Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывод результата функции в div (https://javascript.ru/forum/misc/85504-vyvod-rezultata-funkcii-v-div.html)

Вадим2019 26.09.2023 16:03

Вывод результата функции в div
 
Добрый день!
Имею вот такой код

<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[indexTo];
</script>
 
<div id="param"><span id="paramValue"></span></div>


Код должен выдавать ответ в следующем виде

Код:

{
  "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"
}

При помощи document.getElementById('paramValue').innerHTML = data[indexTo]; пытаюсь вывести значение indexTo в div/span.

Но ничего не выводится, подскажите как решить задачу?

Cuntmann 26.09.2023 16:27

Попробуйте расположить ваш скрипт ниже дива по коду

voraa 26.09.2023 16:27

А где элемент с классом map__params?
И что такое indexTo?
Где вызов функции callbackFunction?
Что такое data в
document.getElementById('paramValue').innerHTML = data[indexTo];

Вы в консоль то заглядываете? Просто что бы посмотреть ошибки.

Вадим2019 26.09.2023 16:35

Цитата:

Сообщение от Cuntmann (Сообщение 553389)
Попробуйте расположить ваш скрипт ниже дива по коду

Это не помогает..

voraa 26.09.2023 16:37

И кстати
typeof null === 'object'

Вадим2019 26.09.2023 16:40

Цитата:

Сообщение от voraa (Сообщение 553390)
А где элемент с классом map__params?
И что такое indexTo?
Где вызов функции callbackFunction?
Что такое data в
document.getElementById('paramValue').innerHTML = data[indexTo];

Вы в консоль то заглядываете? Просто что бы посмотреть ошибки.

Вызов функции:
Код:

<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>


indexTo - это значение индекса из ответа.

Консоль ругается на Uncaught ReferenceError: data is not defined в строке document.getElementById('paramValue').innerHTML = data.indexTo;

Также ругается на
Cannot set properties of null (setting 'innerHTML') at Object.callbackFunction в строке paramsContainer.innerHTML = '';

voraa 26.09.2023 16:46

Цитата:

Сообщение от Вадим2019
indexTo - это значение индекса из ответа.

Консоль ругается на Uncaught ReferenceError: data is not defined в строке document.getElementById('paramValue').innerHTML = data.indexTo;

Также ругается на
Cannot set properties of null (setting 'innerHTML') at Object.callbackFunction в строке paramsContainer.innerHTML = '';

Ну так indexTo должно быть где то описано и ему должно быть присвоено какое то значение. Где этот индекс считается?
data у вас определена как параметр функции. А вне функции никакой data нет.

const paramsContainer = document.querySelector('.map__params');
Если нет элемента с классом map__params, то paramsContainer будет null.

ЗЫ Так data.indexTo или data[indexTo] ?

Вадим2019 26.09.2023 16:51

в первом сообщении написал:
функция должна возвращать вот такой ответ, indexTo в нем
{
  "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"
}


В самом скрипте ошибки точно не должно быть, так как это готовое решение с сайта почты россии, я же пытаюсь вывести из ответа этой функции значение в поле div.

Все что я самостоятельно подписал в скрипте это:
document.getElementById('paramValue').innerHTML = data[indexTo];

Вадим2019 26.09.2023 16:54

Виджет установленный на сайте должен передавать в эту callback функцию ответ, который я прикрепил выше.. А я из этого ответа должен как то взять значения... Сам виджет работает, пункт выдачи выбирается.. Ошибок нет..

voraa 26.09.2023 16:57

Цитата:

Сообщение от Вадим2019
Все что я самостоятельно подписал в скрипте это:
document.getElementById('paramValue').innerHTML = data[indexTo];

Ну не пишут data[indexTo], если indexTo не переменная, а имя свойства!

Но все равно, если нет элемента с классом map__params, то paramsContainer будет null!

И data вне функции должна быть как то определена!


Часовой пояс GMT +3, время: 17:06.