Модальное диалоговое окно jQuery для события ajaxStart - PullRequest
4 голосов
/ 02 июня 2010

Я пытаюсь использовать модальное диалоговое окно jQuery UI в качестве индикатора загрузки через события ajaxStart, ajaxStop / ajaxComplete. Когда страница запускается, обработчик Ajax загружает некоторые данные, и модальное диалоговое окно показывает просто отлично. Однако он никогда не скрывает и не закрывает диалоговое окно, когда событие Ajax завершено. Возвращается очень маленький кусочек кода с локального сервера, поэтому фактическое событие Ajax происходит очень быстро.

Вот мой фактический код для модального div:

      $("#modalwindow").dialog({
              modal: true,
              height: 50,
              width: 200,
              zIndex: 999,
              resizable: false,
              title: "Please wait..."
      })
      .bind("ajaxStart", function(){ $(this).show(); })
      .bind("ajaxStop", function(){ $(this).hide(); });

Событие Ajax - это просто простой $.ajax({}) вызов метода GET.

Основываясь на некоторых результатах поиска здесь и в Google, я попытался изменить обработчик ajaxStop, чтобы использовать $("#modalwindow").close(), $("#modalwindow").destroy() и т. Д. (#Modalwindow, упоминаемый здесь как явный контекст).

Я также пытался использовать стандарт $("#modalwindow").dialog({}).ajaxStart(....

Должен ли я связывать события с другим объектом? Или вызывать их из события $.ajax() complete?

Должен отметить, что я тестирую последние версии IE8, FF 3.6 и Chrome. Все имеют одинаковый / похожий эффект.

Ответы [ 2 ]

6 голосов
/ 02 июня 2010

Нашел ответ:

  $("#modalwindow").dialog({
          modal: true,
          height: 50,
          width: 200,
          zIndex: 999,
          resizable: false,
          title: "Please wait..."
  })
  .bind("ajaxStart", function(){
      $(this).dialog("open"); })
  .bind("ajaxStop", function(){
      $(this).dialog("close");
  });

Примечание для себя: RTFM .

Конечно, во всем этом теперь я понимаю, что он открывается и закрывается так быстро, что становится бесполезным. Ну что ж, надеюсь, кто-то найдет это полезным.

1 голос
/ 02 июня 2010

"Всякий раз, когда Ajax-запрос завершается, jQuery проверяет, есть ли другие ожидающие Ajax-запросы." У вас одновременно выполняются другие AJAX-запросы? Вместо этого вам нужно будет использовать ajaxComplete или параметр обратного вызова для .ajax(), чтобы получить только одно завершение.

...