点击后超时JavaScript功能

时间:2016-03-25 20:52:39

标签: javascript jquery ajax

我已经用AJAX替换了我网站上的iframe。它现在变得更好,速度更快。人们可以单击刷新按钮刷新动态区域。

我正在使用此功能:

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我的网站。提前谢谢。

2 个答案:

答案 0 :(得分: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秒会更简单。

答案 1 :(得分: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;
 }
})()