點一個按鈕,則向服務器請求資源,不作處理時,多次點擊后會有很多個請求在等待。我們知道一般我們用ajax是異步請求,那么我們快速重復點擊一個按鈕得到的結果其實我們並不知道是哪次點擊的結果可能是第一次可能是最后一次也可能是第二次。那么我們怎么解決這個問題呢,簡單粗暴的方法就是在發送請求的時候將按鈕disabled在請求完成成功之后解除disabled,那么一旦請求失敗請求將一直處於pending狀態, 因此考慮的情況就多了success,error,complete等事件,而且不利於用戶體驗。ajax的abort方法可以很好的解決這個問題,但是使用這個abort();方法取消的時候,實際上會觸發$.ajax success事件,所以在success是的回調函數需要添加判斷ajax請求是否存在,存在才執行回調函數。
我們項目上在使用ajax的時候是封裝好的方法,在使用abort方法的時候考慮到可能出現多個請求同時進行,那么我們在封裝的ajax方法里邊是沒有辦法使用abort方法的,因為統一的方法只能執行一個請求(當然這是我們項目里邊的方法是這樣字的,大家可以根據自己封裝的ajax方法進行綜合考慮是用什么方法)。
在解決重復請求的問題我們采用了單個問題單個解決的方法(當然這可能不是最好的方法,待優化~)
1.定義一個全局變量var flag=0//用來記錄點擊次數;
2.點擊方法
function requestEvent(){
flag++;
...
//ajax請求的回調函數
callbackFun:(
function(a){
if(a<flag){
return;
}//判斷當前回調函數是否是最后一次請求
cb(res);//執行回調成功的函數方法
}
)(flag)
}
這里並沒有取消重復請求而是只執行了最后一次請求的回調函數,菜菜一枚~大家有好的方法歡迎交流