2016-03-25 50 views
0

我用AJAX替換了我的網站上的iframe。現在好多了,速度要快很多。人們可以點擊刷新按鈕刷新動態區域。點擊後超時JavaScript功能

我使用這個功能爲:

function djrefresh() { 
    $('#dj_status').load('inc/dj_status_frame.php'); 
    $('#djbanner').load('inc/djbanner.php'); 
    $('#djknopjes').load('inc/dj_knopjes_frame.php'); 
    $('#djzegt').load('inc/dj_zegt_frame.php'); 
    $('#djfooter').load('inc/footer_frame.php'); 
    $('#berichtenbalkframe').load('inc/berichtenbalk_frame.php'); 
} 

工作完全正常,但我的網站需要一次全部加載了很多東西。我希望用戶能夠點擊一次並獲得30秒的超時時間。

...或者如果你有更好的想法,請告訴我。我不希望用戶使用我自己的腳本來DDOS我的網站。提前致謝。

+0

超時後會發生什麼? – phenxd

+0

'setInterval(djrefresh,30000)' – dfsq

+0

要注意:沒有任何東西阻止用戶把你的代碼顯示出來,只是循環10000次。例如:'for(var i = 0; i <10000; i ++)$('#dj_status')。load('inc/dj_status_frame.php');'。這可以從您的網頁的控制檯運行。解決服務器端而不是客戶端問題非常重要,因爲客戶端不能被信任,甚至沒有他們的呼叫。此外,DDoS通常是由大量的IP來完成的,這些IP只是垃圾郵件請求;如果無法輕鬆實現自動化,他們根本不傾向於與頁面進行交互。 –

回答

1

更改您的網站arcitcture是可能是最好的選擇,但沒有更多的信息很難給出任何建議。無論如何,要限制撥打djrefresh,您可以使用去抖功能。 UnderscoreJS包含該功能,或者您可以自己寫一個。

function debounce(func, wait, immediate) { 
    var timeout; 
    return function() { 
     var context = this, args = arguments; 
     var later = function() { 
      timeout = null; 
      if (!immediate) func.apply(context, args); 
     }; 
     var callNow = immediate && !timeout; 
     clearTimeout(timeout); 
     timeout = setTimeout(later, wait); 
     if (callNow) func.apply(context, args); 
    }; 
}; 

這是從https://davidwalsh.name/javascript-debounce-function採取(我個人用它頗有幾分)。
這個假設「刷新按鈕」是一個按鈕的頁面,而不是瀏覽器刷新。
編輯:如果您的網站上有刷新按鈕,點擊後將它關閉30秒會更簡單。

+0

看起來像一個很好的腳本,你到達那裏。然而,我還沒有太多的JavaScript,可能是一個noob問題,但我怎麼能夠使用它與我的腳本? –

+0

debouce爲你執行'debounce(djrefresh,30000)'你現在正在調用'djrefresh' –

+0

是的,這是可行的,非常感謝你! –

0

只需創建一個呼叫計數,對呼叫使用回調,如果所有呼叫都已完成加載,則允許該功能繼續。

var djrefresh; 

//close values to reduce variable name collision 
(function(){ 
var locked = false; 
var callcount = 0; 
djrefresh = function() { 
    if(locked) return; 
    locked = true; 
    $('#dj_status').load('inc/dj_status_frame.php',unlock); 
    $('#djbanner').load('inc/djbanner.php',unlock); 
    $('#djknopjes').load('inc/dj_knopjes_frame.php',unlock); 
    $('#djzegt').load('inc/dj_zegt_frame.php',unlock); 
    $('#djfooter').load('inc/footer_frame.php',unlock); 
    $('#berichtenbalkframe').load('inc/berichtenbalk_frame.php',unlock); 
} 
function unlock(){ 
    if(++callcount == 6) locked = false; 
} 
})()