ASP.NET MVC - время ajax-запроса - PullRequest
       13

ASP.NET MVC - время ajax-запроса

1 голос
/ 08 сентября 2010

Я использую модальное диалоговое окно jQuery для отображения пользователю сообщения типа «Пожалуйста, подождите», когда на сервер выполняется вызов ajax.

Я делаю это, делая диалоговое окно видимымиспользуя метод jQuery ajaxSend.И я закрываю диалог, используя метод jQuery ajaxComplete.

Все довольно рутинные вещи, я уверен.

Однако, если вызов занимает очень мало времени (скажем, 10 миллисекунд), тогда яЯ хочу подождать, пока не пройдет секунда с тех пор, как диалоговое окно становится видимым, прежде чем я закрою его.Причина заключается в том, чтобы предоставить обратную связь с пользователем ... и остановить ужасное мерцание быстро открывающегося и закрывающегося диалогового окна.

Как этого добиться с помощью jQuery и / или ajax?

Многиеспасибо за любые указатели.

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

Будет ли лучшая парадигма на самом деле подождать некоторое время, прежде чем показывать диалог?Если у вас есть отзывчивое приложение, то имеет смысл показывать модальное значение только в том случае, если ответ не возвращается в течение, скажем, 100 мс.Это позволит избежать задержки пользовательского интерфейса, просто чтобы избежать мерцания, которое вы предлагаете.

Примечание. Я использую beforesend и success здесь, чтобы придумать код

  var timerid;

  beforeSend: function(){

       //open the dialog in 100 milliseconds
       timerid = window.setTimeout( function(){

            $('#dialog').dialog('close');

       }, 100)

    },
  success: function(){

      //cancel the showing of the dialog if not already called
      window.clearTimeout( timerid );
      //close the dialog regardless
      $('#dialog').dialog('close');
  }

Если вам не нравится эта идея, тогда Simplay поместит функцию закрытия диалога внутри setTimeout в обратный вызов ajax complete

complete : function(){

   //close the dialog in 1 second
   window.setTimeout( function(){

        $('#dialog').dialog('close');

   }, 1000)

}
0 голосов
/ 09 сентября 2010

Я сам собрал решение для этого - основываясь на великолепном отклике 'redsquare' и некотором дальнейшем чтении.

Я использовал код из redsqure, чтобы открыть модальное диалоговое окно только по истечении заданного промежутка времени - таким образом, надеюсь, что вообще не нужно открывать модальное окно.

Для того, чтобы модал открылся, я добавил код, чтобы он оставался открытым в течение как минимум 800 миллисекунд ... только для того, чтобы избежать возможности его быстрого вспыхивания на экране. Чтобы достичь этого, я запускаю таймер JavaScript в методе «ajaxSend», а затем использую метод «ajaxComplete», чтобы определить, открыт ли модальный режим. Если это так, я использую таймер, чтобы вычислить, как долго он был открыт, и компенсировать разницу до 800 миллисекунд. Я адаптировал сценарий, который я нашел в Интернете для моего таймера. Сценарий ниже.

var timer_ms = 0;
var timer_state = 0;

/// <summary>
/// Responsible for starting / stopping the timer. Also calculates time.
/// </summary>
function timerStartStop() {
    if (timer_state == 0) {
        timer_ms = 0;
        timer_state = 1;
        then = new Date();
        then.setTime(then.getTime() - timer_ms);
    }
    else {
        timer_state = 0;
        now = new Date();
        timer_ms = now.getTime() - then.getTime();
    }
}

/// <summary>
/// Resets the timer.
/// </summary>
function timerReset() {
    timer_state = 0;
    timer_ms = 0;
}

Спасибо. Спасибо.

...