У меня есть расширение Google Chrome, которое при нажатии кнопки выполняет запрос xmlhttp на сервер. В настоящее время я обрабатываю ошибку, если сервер не работает. Чего я хочу добиться - это повторить запрос через большее количество секунд. Вот как я это делаю:
var execute = function(method, url, i){
//if timeout doesn't exist, create one
if(!i){
i = 1000;
}
var xmlhttp = new XMLHttpRequest();
xmlhttp.open(method, url, true);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.status != 200) {
// Handle error, retry request
console.log("xmlhttp.status = " + xmlhttp.status + " and xmlhttp.readyState = " + xmlhttp.readyState);
setTimeout("execute('"+method+"', '"+url+"', "+i*2+")", i);
return;
}
};
xmlhttp.send(null);
}
Обычно, если возникает какая-то проблема, я повторяю запрос еще раз. Если сервер работает, проблем вообще нет, но если сервер не работает, JavaScript выдает сообщение об ошибке:
PUT http://localhost:3000/buy/2/id=1329664820124
executepopup.html:127
(anonymous function)
Что на самом деле не имеет смысла, но как бы то ни было. Статус в журнале говорит "0", что тоже довольно неубедительно. Если я снова включаю сервер во время этого процесса, он должен прекратить это делать, но вместо этого также, если это происходит успешно (я вижу журнал на сервере, который сообщает мне, что он получил запрос), он продолжает вызывать execute
метод. Я не знаю, как остановить эту рекурсию, если сервер включается. Я делаю что-то неправильно? Является ли это состояние равным нулю проблема?
Большое спасибо