jquery ajax避免重複觸發同一個事件

拿個我最近在作的功能舉例:javascript

    關注他人的功能:有一個關注按鈕,實現關注與取消關注功能。(數據庫是mysql)java

    因爲是ajax操做,有個回調方法,在返回success以前或者瀏覽器卡頓之間會出現重複觸發同一個事件。
mysql


方法1:ajax

    最笨的方法就是在關聯表中插入數據前先查詢 ,而後判斷有沒有兩人的關聯數據。若沒有則插入,如有則不插入。此方法,當表單數據量多的時候,操做不只慢,還會給服務器帶來必定壓力。sql

方法2:數據庫

    setTimeout + clearTimeout
瀏覽器

連續的點擊會把上一次點擊清除掉,也就是ajax請求會在最後一次點擊後發出去服務器

方法3:函數

button有一個屬性是disabled,能夠控制其是否能夠點擊,代碼以下:this

<input type="button" value="Click" id="subBtn"/>
<script type="text/javascript">
function myFunc(){
    //code
    //執行某段代碼後可選擇移除disabled屬性,讓button能夠再次被點擊
    $("#subBtn").removeAttr("disabled");
}
$("#subBtn").click(function(){
    //讓button沒法再次點擊
    $(this).attr("disabled","disabled");
    //執行其它代碼,好比提交事件等
    myFunc();
});
</script>

方法4:

    給ajax請求一個"開關",效果等同於方法3。代碼以下:

var flag = false //定義一個開關,默認是關

$("#subBtn").click(function(){
    if(!flag){
        flag = true; //打開開關
        //若開關處於開的狀態,執行其它代碼,好比提交事件等
        flag = false; //執行完代碼,須要在回調函數的最後將開關關閉 
    }
});


    以上方法2,3比較經常使用。看到知乎上的大神說,能夠本身寫封裝的ajax,內嵌一些機制,暫時還未理解,等理解了再完善一下。

相關文章
相關標籤/搜索