拿個我最近在作的功能舉例: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,內嵌一些機制,暫時還未理解,等理解了再完善一下。