Jquery - запускать на клиенте, пока сервер Apache перезагружается?

0

У меня есть простая страница php, на которой есть кнопка. Когда кнопка нажата, сервер Apache перезагружается. Это предназначено и работает так, как ожидалось.

Когда нажата кнопка, я могу ждать 10 секунд, а затем отображать "Apache Reloaded"? или, поскольку сервер был перезагружен, это уничтожит то, что делает клиент?

благодаря

Теги:

3 ответа

1
Лучший ответ

Сначала вы привязываете событие к вашей кнопке в этом случае к 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();
});
  • 0
    Что делать, если перезапуск занимает более 10 секунд?
  • 0
    позвольте мне изменить мой awnser, я неправильно понимаю ваши потребности
Показать ещё 8 комментариев
0

Я буду использовать псевдокод, но это можно легко записать в 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"
0

ПРИМЕЧАНИЕ. Я не знаю точно, что вы имеете в виду с "сервером перезагрузки", если это действительно перезагружает страницу, все, что вы укажете после этого вызова (для перезагрузки страницы), не будет выполнено.

Если вы не перезагрузите страницу:

Вы можете использовать функцию задержки Jquery для вывода данных с задержкой, хотя она в основном используется для эффектов.

Обычно я использую javascript timeout, когда речь идет о тексте и т.д.

  • 0
    Если в вашем внутреннем коде есть функция, которая перезагружает сервер и снова запускает страницу, вы можете передать сообщение «Сервер перезагружен», реализация зависит от того, как вы перезагрузите сервер.
  • 0
    Здравствуй. Кнопка вызывает скрипт, который перезагружает сервер Apache.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню