За последние 24 часа нас посетили 20205 программистов и 1079 роботов. Сейчас ищут 753 программиста ...

Работа с API

Тема в разделе "JavaScript и AJAX", создана пользователем Rocketware, 12 янв 2022.

Метки:
  1. Rocketware

    Rocketware Активный пользователь

    С нами с:
    1 дек 2020
    Сообщения:
    33
    Симпатии:
    0
    Всем привет, я новичок новичком)
    Начал учить работу с API, пытаюсь получить курс доллара с банка
    Вот код
    HTML:
    1. <!DOCTYPE html>
    2.     <meta charset='utf-8'>
    3.     <title>Данные из моно</title>
    4.     <meta name='viewport' content='width=device-width, initial-scale=1'>
    5.     <script src='main.js'></script>
    6. </head>
    7.     <p>Курс покупки доллара</p>
    8.     <p id="USDBuy"></p>
    9.     <p>Курс продажи доллара</p>
    10.     <p id="USDSell"></p>
    11.     <button onclick="getUSD()">Получить Курс</button>
    12. </body>
    13. </html>
    Вот код JS

    Код (Javascript):
    1. function getUSD() {
    2. var requestURL = 'https://api.monobank.ua/bank/currency';
    3. var request = new XMLHttpRequest();
    4. request.open('GET', requestURL);
    5. request.responseType = 'json';
    6. request.send();
    7.  
    8.  
    9. request.onload = function() {
    10.     var res = request.response;
    11.     pbuy = document.getElementById("USDBuy");
    12.     pbuy.innerHTML = res[0].rateBuy;
    13.     psell = document.getElementById("USDSell");
    14.     psell.innerHTML = res[0].rateSell;
    15.  
    16. }
    17. }
    Когда загружаю страницу и нажимаю на кнопку получить кус, все работает, но когда я нажимаю на нее еще раз и все последующие разы - получаю ошибку в консоли:

    Uncaught TypeError: Cannot read properties of undefined (reading 'rateBuy')
    at XMLHttpRequest.request.onload (main.js:12)

    Подскажите, плиз, в чем мой косяк?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.817
    Симпатии:
    735
    Адрес:
    Татарстан
    кто ж знает....
    попробуйте после
    Код (Javascript):
    1.     var res = request.response;
    добавить вывод в консоль
    Код (Javascript):
    1. console.log(res);
    ну и посмотрите что выдаст в консоль, в первый раз и во второй
     
  3. Rocketware

    Rocketware Активный пользователь

    С нами с:
    1 дек 2020
    Сообщения:
    33
    Симпатии:
    0
    Спасибо большое!
    Получил
    {errorDescription: 'Too many requests'}
    Это значит, что банк не хочет, чтобы у них клацал на кнопку каждые 3 секунды и опрашивал API?
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.817
    Симпатии:
    735
    Адрес:
    Татарстан
    типа того.... лимит есть
    да и курсы ежесекундно не меняются.... достаточно пару раз в день
    обычно результат кешируют - и обновляют после "протухания" кеша
    например в js можно в localStorage
     
    Rocketware нравится это.