2010-09-08 180 views
1

我正在使用jQuery模式對話框來顯示一個'請稍候'類型的消息給用戶,當一個Ajax調用回到服務器。ASP.NET MVC - 時間ajax請求

我正在通過使用jQuery ajaxSend方法使對話框可見來做到這一點。然後使用jQuery ajaxComplete方法關閉對話框。

我相信所有相當常規的東西。

但是,如果調用時間很短(比如說10毫秒),那麼我希望等到第二次調用之後,在對話框關閉之前讓對話框可見。原因是要提供用戶反饋......並停止快速打開和關閉對話的可怕閃爍。

我該如何使用jQuery和/或ajax實現?

非常感謝任何指針。

回答

0

我已經爲自己解決了這個問題 - 基於'redsquare'和一些進一步閱讀的巨大反應。

我已經使用redsqure的代碼來打開模態對話框,只有在給定的持續時間已經過去之後 - 因此希望不必打開模態。

當模式打開時,我添加了代碼以確保它至少保持打開800毫秒......只是爲了避免它在屏幕上快速閃爍的可能性。爲了實現這一點,我在'ajaxSend'方法中啓動了一個javascript定時器,然後使用'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

在顯示對話框之前是否會有更好的範例實際等待一段時間?如果你有一個響應式應用程序,那麼只有在響應沒有在100ms內回來時才顯示模式是有意義的。這樣可以避免延遲UI,以避免閃爍,這就是你所提出的。

注意我用的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裏面的AJAX完整的回調如內

complete : function(){ 

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

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

    }, 1000) 

}