2017-09-15 77 views
1

我正在使用ajax来获取一些数据。问题是ajax请求来自悬停按钮,因此可能非常容易地将可能导致失败的请求垃圾邮件error 404 or error 500。这是我的ajax代码:防止Ajax返回失败,频繁请求?

$.ajax({ 
      url: location.origin+'/getcat', 
      data : { 
        't': id 
       }, 
      success: function(){ alert("I'm handsome"); } 
}); 

问题是如何防止这个垃圾邮件请求?

+1

你将要实现去抖功能,.. lodash有一个简单的功能 - > https://lodash.com/docs/4.17.2#debounce – Keith

回答

0

您可以用setTimeout()使其:

$(document).ready(function(){ 
var timer; 
var delay = 1000; 
    $("p").hover(function(){ 
     timer = setTimeout(function() { 
     console.log("Requesting") 
     $.ajax({ 
        url: location.origin+'/getcat', 
        data : { 
          't': id 
         }, 
        success: function(data){ 
         alert('Im handsome'); 
         } 
        }); 
     }, delay); 
     }, function(){ 
     clearTimeout(timer); 
     console.log("Canceled request") 
    }); 
}); 
+0

哪里是clearTimeout( ) 来自(哪里?它是默认功能还是自定义? @SilverSurfer –

+0

这是一个JavaScript方法 – SilverSurfer

+0

@Myrealname标准JS。查看JS计时器上的任何文档。 –

0

你可以使用.one()将只使用事件处理一次。然后,当冷却时间到期时,您可以再次执行.one()

(function enableRequests() { 
 
    console.log("listening for next mouse move"); 
 
    $('#spn').one("mousemove", function() { 
 
     console.log("launching request, and cooling down for 5 seconds"); 
 
     $.ajax({ 
 
      url: "https://jsonplaceholder.typicode.com/posts/1", 
 
      success: function() { console.log('response from server') } 
 
     }); 
 
     setTimeout(enableRequests, 5000); // 5 second cooldown period 
 
    }); 
 
})(); // execute immediately
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span id="spn">Hover here</span>

+0

谢谢先生,我会稍后再尝试@trincot –