简体   繁体   English

发送 ajax 请求之前的延迟不起作用

[英]Delay before sending ajax request does not work

When I do hover over <td> it does wait 900 milliseconds and then sends a lot of requests (I always hover over more tds in these 900ms).当我在<td>上执行 hover 时,它确实会等待 900 毫秒,然后发送大量请求(我总是在这 900 毫秒内超过更多 tds 的 hover)。 What am I doing wrong?我究竟做错了什么? why only clearTimeout (commented) works?为什么只有clearTimeout (评论)有效?

My point is to wait before hitting server and if user move mouse to another <td> in this running countdown (900ms), previous countdown is aborted and new one takes place我的观点是在点击服务器之前等待,如果用户在此运行倒计时(900 毫秒)中将鼠标移动到另一个<td> ,则先前的倒计时将中止并发生新的倒计时

        $(function(){
                var isLoading = false;
                $("td").hover(function(){
                        var x = parseInt(0);
                        var position = $(this).attr('id');
                        clearTimeout(timer);
                        var oID = $(this).attr('id');
                        var oData = $(this);
                        var timer = setTimeout(function(){
                                if (position == oID&&!isLoading)
                                {
                                        clearTimeout(timer);
                                        $.ajax({
                                                beforeSend: function(xhr){ var isLoading = true; },
                                                url: 'ajax.php?what=click&position='+position,
                                                success: function(data){
                                                        $('#hovercard').css(oData.offset());
                                                        $('#hovercard').show();
                                                        $('#hovercard').html(data);
                                                }
                                        });
                                }
                        }, 900);
// this only works ->                                             clearTimeout(timer);
                });
        });

You will need to store timer in a scope outside the hover function.您需要将timer存储在 hover function 之外的 scope 中。 I'm not so sure about the scope for isLoading either, so if this doesn't work, try moving isLoading out to the same scope as timer :我也不太确定用于isLoading的 scope ,所以如果这不起作用,请尝试将isLoading移至与timer相同的 scope :

    var timer;
    $(function(){
            var isLoading = false;
            $("td").hover(function(){
                    var x = parseInt(0);
                    var position = $(this).attr('id');
                    clearTimeout(timer);
                    var oID = $(this).attr('id');
                    var oData = $(this);
                    timer = setTimeout(function(){
                        if (position == oID&&!isLoading)
                        {
                                clearTimeout(timer);
                                $.ajax({
                                        beforeSend: function(xhr){ isLoading = true; },
                                        url: 'ajax.php?what=click&position='+position,
                                        success: function(data){
                                                    $('#hovercard').css(oData.offset());
                                                    $('#hovercard').show();
                                                    $('#hovercard').html(data);
                                        }
                                });
                        }
                   }, 900);
           });
   });

You have some other oddities as well.你还有其他一些奇怪的东西。 Note that oID always will be equal to position as they are set at the same time, in the same scope.请注意,oID 始终等于 position,因为它们同时设置在同一个 scope 中。 This makes the first condition in your if statement pointless.这使得 if 语句中的第一个条件毫无意义。 I've also removed the var statement in your beforeSend function.我还删除了 beforeSend function 中的var语句。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM