2010-09-08 2 views
1

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

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

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

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

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

Большое спасибо за любые указатели.

ответ

0

Я собрал решение для этого сам - на основе отличного ответа от «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; 
} 

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

1

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

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

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 в АЯКС полного обратного вызова, например

complete : function(){ 

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

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

    }, 1000) 

}