2012-10-18 82 views
2

我有一個網站,使ajax調用,然後加載一個gif在電視上顯示靜態。但是現在,阿賈克斯電話並沒有花費足夠的時間讓效果真正流行。所以我想知道是否有辦法設置ajax調用的最短時間?如何設置Ajax調用的最小持續時間?

你可以看到the website我試圖讓我更清楚自己在做什麼。嘗試點擊桌子上正確的相框或留聲機。

<script type="text/javascript"> 
    var minDelay = 1000; 
    var start = new Date(); 
    $.get("form.html", function(result) { 
     callback($(result).find("#contact")); 
     var end = new Date(); 
     var timeInMilliseconds = end - start; 
     if (timeInMilliseconds < minDelay) { 
      setTimeout(function() { callback(result); }, minDelay - timeInMilliseconds); 
     } 
     else callback(result); 
    }); 
    $.get("music.html", function(result) { 
     callback($(result).find("#music")); 
     var end = new Date(); 
     var timeInMilliseconds = end - start; 
     if (timeInMilliseconds < minDelay) { 
      setTimeout(function() { callback(result); }, minDelay - timeInMilliseconds); 
     } 
     else callback(result); 
    }); 


    function callback(result) { 
     $("#screen").html(result); 
    } 
</script> 
+1

不錯的圖形工作。 – Tinman

+0

嘿非常感謝 –

回答

6

您可以計算開始點和結束點的時間,如果它低於某個閾值(使用setTimeout),則可以添加另一個延遲。事情是這樣的:

var minDelay = 1000; 
var start = new Date(); 
$.get(url, function(result) { 
    var end = new Date(); 
    var timeInMilliseconds = end - start; 
    if (timeInMilliseconds < minDelay) { 
     setTimeout(function() { callback(result); }, minDelay - timeInMilliseconds }); 
    } 
    else callback(result); 
}); 

function callback(result) { 
    // Ajax response handling here ... 
} 

編輯我不知道你能做到這一點使用jQuery的load(佔docs,則目標將立即被更新的響應從服務器接收後)。我建議將load調用轉換爲gets。也就是說,這樣的:

$("#screen").load("form.html #contact"); 

應該成爲這樣的:

$.get("form.html", function(result) { 
    callback($(result).find("#contact")); 
}); 

而且callback功能我上面由然後應該填充的load目標。

function callback(html) { 
    $("#screen").html(html); 
} 
+0

您能否詳細說明我已添加到我的文章中的代碼?我正在使用jquery .load函數。這是一個問題嗎?謝謝dbaseman –

+0

@katiebekell嗯,是的,根據文檔,我沒有看到你如何使用'load'來實現這個功能......你可以將它們切換爲'get'調用嗎? – McGarnagle

+0

我在哪裏設置應該調用什麼gif,並且我還注意到,如果它是響應,您將函數(結果)更改爲響應(結果)?感謝您的幫助,我可以看到燈 –

1

你可以使用一個setTimeout()方法在AJAX回調方法來模擬延遲? 很酷的網站btw!

示例代碼:

var minDelay = 500;//half a second 
setTimeout(DelayTimePassed, minDelay); 
//make Ajax Call 

function DelayTimePassed() 
{ 
if(dataAvailable) 
//show Data 
else 
//show data as soon as available 
} 

function AjaxCallback() 
{ 
if(showDataAsSoonAsAvailable) 
//Show Data Now 
else 
dataAvailable=true;//show data after time delay passes 
} 

。希望對你有意義的 - 這兩種方法檢查對全局布爾變量來決定何時顯示數據。

+0

你能告訴我setTimeout()會去哪裏嗎?我試過這個,並沒有得到我期待的結果謝謝我很高興你喜歡這個網站 –

+0

剛剛在一些示例代碼中編輯。 :) –

+0

即時通訊對不起,但我仍然有點失落 - 我已經添加了我的ajax代碼到我的文章。我只是使用load()函數 –

相關問題