2017-09-15 20 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 –