#javascript
Вопрос:
У меня есть конечная точка RestAPI, предоставляющая простой ответ с одним флагом «needUpdate» true/false.
Я пытаюсь написать функцию опроса Javascript, которая вызывает эту конечную точку, и в случае, если needUpdate=true, она перезагружает всю веб-страницу.
var url = "https://www.example.com/api";
var needUpdate;
function poll(){
setTimeout(function(){
const xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.responseType = 'json';
xhr.onload = function(e) {
if (this.status == 200) {
const myObj = this.response;
var needUpdate = myObj["needUpdate"];
console.log('needUpdate', needUpdate); // console
}
};
xhr.send();
if(needUpdate == true){
location.reload();
} else {
poll();
}
}, 3000);
}
var json = JSON.stringify(poll());
Он вызывает API каждые 3 секунды, как и ожидалось, а также указывает правильное значение needUpdate в консоли. Но перезарядки не происходит.
Похоже, что значение needUpdate на самом деле не определено в том месте, где я пытался установить условие.
Не могли бы вы, пожалуйста, помочь мне?
Комментарии:
1. добавьте условие после этой строки
console.log('needUpdate', needUpdate); // console
2. определите переменную needUpdate вне функции setTimeout
Ответ №1:
условие перемещения внутри xhr.onload
функции
var url = "https://www.example.com/api";
var needUpdate;
function poll(){
setTimeout(function(){
const xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.responseType = 'json';
xhr.onload = function(e) {
if (this.status == 200) {
const myObj = this.response;
var needUpdate = myObj["needUpdate"];
console.log('needUpdate', needUpdate); // console
if(needUpdate == true){
location.reload();
} else {
poll();
}
}
};
xhr.send();
}, 3000);
}
var json = JSON.stringify(poll());