У меня есть простая страница php, на которой есть кнопка. Когда кнопка нажата, сервер Apache перезагружается. Это предназначено и работает так, как ожидалось.
Когда нажата кнопка, я могу ждать 10 секунд, а затем отображать "Apache Reloaded"? или, поскольку сервер был перезагружен, это уничтожит то, что делает клиент?
благодаря
Сначала вы привязываете событие к вашей кнопке в этом случае к id #button
Затем вы вызываете метод объекта проверки, ajax_check.reload_apache();
который запустит метод ajax, который отправит запрос на ваш URL-адрес (который перезапустит apache), после успеха он запустит метод Bridge, что он будет зацикливать запросы ajax (на другой URL-адрес, потому что мы не хотим перезагружать apache) каждые 5 секунд с максимум 5 попытками. (вы можете изменить эти числа в своем конструкторе).
ps: вам нужен jquery, и, конечно, ему все еще нужно немного больше проверки, но оно должно соответствовать вашим потребностям.
function check() {
this.max_errors = 5; // maximum of tries
this.timeout = 5000; // 5 seconds delay in every request
this.url = 'test22'; // url to reload apache ( script url w/e )
this.url_check = 'index'; // any url from your webserver, so you can check if its up
this.status = 0; // don't change
this.interval = 0; // don't change
this.errors = 0; // don't change
this.flag_first = 0; // don't change
}
check.prototype = {
constructor: check,
ajax: function() {
var self = this;
$.ajax({
// if first call use self.url to reload apache
// if requesting for server alive use the url_check
url: (self.flag_first == 1) ? self.url_check : self.url
}).done(function() {
if(self.flag_first == 1){
self.status = 1;
window.clearInterval(self.interval);
console.log('Apache Reloaded');
}else{
// RUNS for the first time
self.flag_first = 1;
self.bridge();
}
}).fail(function(){
if(self.flag_first == 1){
self.errors++;
if(self.errors >= self.max_errors){ // if errors are higher or equal to max_errors
alert('Stopped');
window.clearInterval(self.interval);
self.errors = 0; // reset errors
}
}
});
},
bridge: function() {
var self = this;
this.interval = window.setInterval(function() {
self.ajax();
}, self.timeout);
},
reload_apache: function(){
this.ajax();
}
};
var ajax_check = new check();
$('#button').click(function(e){
e.preventDefault();
ajax_check.reload_apache();
});
Я буду использовать псевдокод, но это можно легко записать в JavaScript или jQuery
On button click:
Send restart request with ajax
Show "Server is restarting" in an overlay for example
Do:
- wait 2 seconds
While (dummy ajax request fails)
Replace "Server is restarting" with "Server restart complete"
ПРИМЕЧАНИЕ. Я не знаю точно, что вы имеете в виду с "сервером перезагрузки", если это действительно перезагружает страницу, все, что вы укажете после этого вызова (для перезагрузки страницы), не будет выполнено.
Если вы не перезагрузите страницу:
Вы можете использовать функцию задержки Jquery для вывода данных с задержкой, хотя она в основном используется для эффектов.
Обычно я использую javascript timeout, когда речь идет о тексте и т.д.