API Buienradar обновляется каждый раз

1

В моем скрипте domotica я работаю с API для "buienradar". Он загружается на странице, но не обновляет каждое "x" время. Таким образом, API останется в цикле, который строится на первой загрузке на странице.

Как я могу изменить свой скрипт, чтобы обновлять API каждый час с помощью новой информации из Интернета /API?

BR, Jeroen

        <div class="col col-md-3 col-sm-6 col-xs-12">
          <div class="box box-primary">
            <div class="box-header with-border">
              <h3 class="box-title">Buienradar</h3>
            </div><!-- /.box-header -->
            <div class="medium-box-body">
                <img id="radarupdate">
                </img>
            </div>
          </div>
        </div>




<script>
    $(function() { Domotica.dashboard.init(); });   

    $(document).ready(function() {
        $('#radarupdate').attr("src","http://api.buienradar.nl/image/1.0/RadarMapNL?w=256&h=256");
        setInterval(function(){
            $('#radarupdate').attr("src","http://api.buienradar.nl/image/1.0/RadarMapNL?w=256&h=256");

            var html = '<img border="0" src="http://api.buienradar.nl/image/1.0/RadarMapNL?w=256&h=256">';
        },900000);
    });

</script>
Теги:
refresh

1 ответ

0

Кэширование изображений

Браузеры обычно игнорируют заголовки кеша и заголовки истечения срока действия на изображениях документов. См. Предыдущие вопросы " Почему браузеры не учитывают прослушиватели управления кешем для изображений, загруженных новыми Image() " и " Обновить изображение с новым, с тем же адресом ". К сожалению, практика защищена в стандарте HTML без возможности управления ею из сценария.

В этом вопросе радарным изображениям на сервере дается истечение кеша через 60 секунд после модификации, но содержимое изображения статично в течение 5 минут (?). Ниже приведен пример заголовка истечения кеша:

last-modified Sun, 07 Jan 2018 01:33:46 GMT
expires Sun, 07 Jan 2018 01:34:46 GMT

Изображения кэшируются в памяти и на диске. Чтение заголовков ответов для истекшего ресурса делает недействительным кеш диска, а использование хеш-компонента в URL-адресе (начиная с "#") делает недействительным кеш памяти. Chrome доволен просто отменой дискового кэша, но Firefox требует, чтобы хэш-тег также приводил к недействительности и кэш-памяти. Используя оба изображения радара, обновленного в обоих браузерах:

$(document).ready(function() {
    var radarURL = "http://api.buienradar.nl/image/1.0/RadarMapNL?w=256&h=256";
    var count = 0;

    function readHeaders(){
        $.ajax( radarURL, {
             method: "HEAD",
             success: updateImage
          }
        );
        setTimeout( readHeaders, (6 - new Date().getMinutes()%5) * 60000); // see note
    }

    function updateImage() {
        count +=1;
        var differentURL = radarURL + "#" + count; // change hash component
        $('#radarupdate').attr("src", differentURL);
    }
    readHeaders();  // first time
});

Заметка

  • readHeaders устанавливает таймер для вызова себя между одной и двумя минутами после окончания текущего 5-минутного интервала в час. Это можно сделать более точным, включив секунды в расчет или изменив их, чтобы обновлять изображения реже.

  • Если страница загружается между обновлением изображения на сервере и окончанием 5-минутного интервала (плюс минута или две), первое обновление покажет одно и то же изображение. Второе обновление должно загружать другой GIF.

  • HTTP-запросы для изображения создаются с использованием опубликованного URL-адреса без дополнительных параметров запроса.

  • 0
    Спасибо за вашу реакцию и новый скрипт, который я протестировал, и фрейм не будет обновляться новыми данными с веб-сайта buienradar. Кажется, что он сделает обновление после времени, установленного в сценарии, потому что я вижу все еще "зависшую" картинку. Но по истечении определенного периода времени он снова «загружает» те же данные, что и раньше (запускается в момент открытия всего сайта)
  • 0
    Извините, я видел, как это работает в Firefox и опубликовал. Сегодня я не смог воспроизвести результат в условиях, подходящих для совместного использования (:. Новый ответ был протестирован в текущих версиях Chrome и Firefox, но, к сожалению, до сих пор нет стандартного решения.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню