Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает ссылка на получение курса валют (https://javascript.ru/forum/jquery/74425-ne-rabotaet-ssylka-na-poluchenie-kursa-valyut.html)

KatyJ 10.07.2018 14:51

Не работает ссылка на получение курса валют
 
Добрый день! Помогите пожалуйста! Пол года назад, делала такой конвертер валют, который пересчитывает из гривен в юань, с учетом комиссии за обмен. Курс валют загружается с сайта НБУ по этой ссылке https://bank.gov.ua/NBUStatService/v...ctory/exchange
Все работало. Но вот с какогото момента курс не загружается. И соответственно конвертер не работает(( Может кто знает, в чем может быть причина?

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
Гривны<input type='text' id='val3'>
Юани по гривнам<input type='text' id='rezultat2' disabled><br>
Юани<input type='text' id='val1'>
Гривны по юаням<input type='text' id='rezultat' disabled>

<script>
   var course = 0;
   $.ajax({
      type: 'get',
      url: 'https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange',
      dataType: 'xml',
      success: function(response) {
           $(response).find("currency").each(function(i,elem) {
              if($(elem).find('r030').text() == '156') { 
                 course = +$(elem).find('rate').text();
             //    alert(course);
              }
        })
     }
});
$('input').on('keyup',function(){
    var value1, value3;
    value1 = parseFloat($('#val1').val()).toFixed(2);
   // course = 3.8;
    value3 = parseFloat($('#val3').val()).toFixed(2);
    
    //с гривен в юани
        if(value3 <= 799){
            $('#rezultat2').val(value3 / course);
        }
        if(value3 >= 800){
            $('#rezultat2').val((value3 - 124) / course);
        }
        if(value3 >= 1600){
            $('#rezultat2').val((value3 - 204) / course);
        }
          //с юаней в гривны
        if(value1 <= 199){
            $('#rezultat').val(value1 * course);
        }
        if(value1 >= 200){
            $('#rezultat').val((value1 - 31) * course);
        }
        if(value1 >= 500){
            $('#rezultat').val((value1 - 51) * course);
        }
        
    });
</script>

Rise 10.07.2018 15:18

Цитата:

No 'Access-Control-Allow-Origin' header is present on the requested resource.
Сервер не отдает специальный заголовок, раньше он видимо был. Почитайте API, если это публичный сервис, возможно что-то поменялось и нужен специальный ключ доступа или еще что, если не публичный, то значит прикрыли дырку)

KatyJ 10.07.2018 15:20

Спасибо!! Буду искать!

Rise 10.07.2018 15:42

Не знаю, спросите у них почему так стало, как я понял сервис публичный, представлено API на сайте.

Rise 10.07.2018 16:01

Можете проксировать через свой сайт, т.е. ajax делать на url: 'https://mysite.ua/exchange.php', а там с php уже делать запрос, тогда отсутствие заголовка доступа не будет действовать.

KatyJ 10.07.2018 17:12

Cервис действительно публичный, и о необходимости специальных ключей ничего не пишется. А в консоли сайта, все же выдает, что доступа нет(

Rise 10.07.2018 17:23

Уже работает)

KatyJ 10.07.2018 17:26

В чем причина была?

Rise 10.07.2018 17:34

В чем я и писал, сейчас появился заголовок доступа, но я здесь не причем, наверное у них там технические работы) И если вам надо только один определенный курс, а не грузить все не нужные, то можно добавить к url ?valcode=CNY, смотрите API пример 3.

Rise 10.07.2018 18:06

JSON тоже можно:
var course;
$.getJSON('https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json&valcode=CNY', function(data) {
    course = data[0].rate;
});

А так лучше ошибки обрабатывать конечно:
$.ajax({
    // ...
    error: function() {
        // ...
    }
});

$.getJSON('...', function(data) {
    // ...
}).fail(function() {
    // ...
});


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