Вероятно, было бы лучше дать какой-то другой признак того, что процесс завершен, а не вводить в заблуждение отображение счетчика, когда на самом деле ничего не обрабатывается. Однако вы, кажется, настроены на это.
Это основано на ответе amurra и предназначено для того, чтобы либо скрыть счетчик, когда процесс загружен, если и только если тайм-аут уже был возвращен. Следовательно, если запрос AJAX возвращает «слишком быстро», он будет ожидать тайм-аут.
var timeoutComplete=false;
var requestComplete=false;
function HideLoadingSpinner() {
if(requestComplete) {
$("#ajaxloader" + id).hide();
} else {
timeoutComplete=true;
}
}
Между тем, внутри обработчика щелчков ...
setTimeout(HideLoadingSpinner, 2000);
$.ajax({type: "POST",
url: url,
data: "id=" + id,
success: function (result) {
$("#timeout" + id).append(result);
$("#signedout" + id).show();
$("#row" + id).css("background", "#E8E8E8");
if(timeoutComplete) {
$("#ajaxloader" + id).hide();
} else {
requestComplete=true;
}
},
error: function () {
alert("There was an unexpected error. Please try again later.");
$("#ajaxloader" + id).hide();
$("#signout" + id).show();
}
});
EDIT: Я только что удалил материал if(timeoutComplete)
из функции error
, так как в любом случае перед ним будет alert
.