@rvitalia

Почему не обновляются локальные данные внутри setInterval?

Добрый день!

Есть интервал установленный на 10 секунд.
export function checkTime() {
    //делаем интервал запроса через каждые 10 секунды и отслеживаем изменение файла.
    setInterval(function () {

        jQuery.ajax({
            url: 'receiveData.php',
            type: 'POST',
            data: {},
            success: function () { 
            },
            error: function () {
                console.log('ERROR');
            }
        })
        receiveTxt();
    }, 10000);
}


Здесь в коде через php получаются некоторые данные с сервера и сохраняются в локальный файл.
Внизу запускается функция (receiveTxt());

Она следующим образом получает данные из файла
function readTextFile(file) {
    let rawFile = new XMLHttpRequest();
    let allText;
    rawFile.open("GET", file, false);
    rawFile.onreadystatechange = function () {
        if (rawFile.readyState === 4) {
            if (rawFile.status === 200 || rawFile.status == 0) {
                allText = rawFile.responseText;
                // alert(allText);
                console.log(allText);                
            }
        }
    }
    rawFile.send(null);
    // console.log(allText);

    return allText;
}


ну и дальше полученный код парсится по нуждам..

Проблема возникла в том, что файл обновляется по факту, а вот в полученных данных нет. Т.е. как он считал первый раз полученные данные, так они и крутятся. Где я ошибся, или что упустил? Заранее спасибо.....
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Как-то все запутано у вас, непонятно зачем.
Отдельно пост через jQuery.ajax, и вместо того чтобы в ответе передать ваш message вы запрашиваете его отдельно. Почему-то уже не через jQuery, а через hxr.

Через fetch не?
fetch('/path/to/message.txt')
  .then((response) => response.text())
  .then((text) => {
    console.log(text);
  });
При необходимости можно и заголовки, и прочие параметры настроить
Наверное единственное преимущество которое осталось у XHR, и которго нет у fetch - возможность отследить прогресс передачи большого файла, чтобы отрисовать полосочку.

А вообще, в целом, ваш код работает.

Добавил пример с fetch, немного логирования, и пришлось заменить в jQuery.ajax post на get, так как plunker не поддерживает POST.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
А - Асинхронность

jQuery.ajax({ // 1. Выполнится этот код
            url: 'receiveData.php',
            type: 'POST',
            data: {},
            success: function () { 
                 // 3. А уже после окончания запроса выполнится этот код
                 // Именно в это время данные будут получены и сохранены.
            },
            error: function () {
                console.log('ERROR');
            }
        })
receiveTxt(); // 2. Потом сразу же выполнится этот код


Отсюда следует простой вывод. Вызов функции receiveTxt следует перенести в коллбэк success
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы