怎樣防止重複傳送 Ajax 請求?

時間 2023-06-03 04:21:01

1樓:邑露泛漣漪

1. settimeout + cleartimeout連續的點選會把上一次點選清除掉,也就是ajax請求會在最後一次點選後發出去?

2. disable 按鈕。

3. 每次點選都發請求,往**里加閉包帶唯一遞增的id,每一次請求**以後看這個id是不是主函式體裡最後一次點選的id,是則呼叫**,不是則返回,也就是ajax回數後看這個**是不是最後一次點選的**,不是就不操作頁面了。

4. 所有的ajax請求都是非同步的,我的封裝中做一個100毫秒的settimeout延時。這樣就可以有效的解決使用者快速重複點選的問題。

足夠快的時候,前一請求並沒有真正的發出來。就被cleartimeout清除掉了。 abort掉ajax的請求也會有服務端響應,需要消耗資源。

5.如果使用者的操作不併足夠快。比如點了儲存按鈕,在伺服器沒有返回成功的時候,再次點了儲存按鈕。

事實上兩次請求是一樣的。而我們更希望第一次的請求是有效的,第二次的可以不做處理).

在封裝中,我們檢查傳入ajax的請url及引數是否一致,如果一致。則第二次的ajax並不發出。

6.最後一種情況,兩次相間的請求是不同的請求,比如樓上說快速切換tab的例子。無法,只能abort掉前一個ajax請求了。

2樓:福喜

可以從多方面去做限制。

直接把按鈕改為灰色,當請求響應後,在響應的**裡再啟用這個按鈕即可在session裡 session["ajax_guid"]放一個隨機的guid值,在頁面載入時,放在頁面的隱藏域裡,在進行ajax請求時,把這個guid值也一起傳送到伺服器,而在伺服器端,要加個過濾器,判斷是否為ajax請求(這一步視情況需要),然後判斷請求的guid和session["ajax_guid"]是否一致。判斷以後立刻生成一個新的 guid放到session["ajax_guid"]中(這一步可以根據需要,一般只要驗證成功才生成新的guid,驗證失敗就不重新生成了)。這個是防止重複提交的好辦法,當然你也可以想一些其他的招。

限制請求時間間隔,同樣,還是用session做一個記錄,記錄請求的時間,當下一個請求到來時,判斷兩次的時間間隔是否滿足你的預期要求。

各種等等根據需要再想想其他的法子。

3樓:折柳成萌

一、問題解決。

解決這種問題有兩種方式:

1.當連續進行多個請求,並且請求的url地址相同時。放棄前面的所有請求,只執行最後一次請求。

2.當連續進行多個請求,並且請求的url地址相同時。放棄後面的所有請求,只執行第一次請求。

二、解決方案。

1、將ajax請求的async設定為false

ajax(async型別:boolean

預設值: true。預設設定下,所有請求均為非同步請求。如果需要傳送同步請求,請將此選項設定為 false。

注意,同步請求將鎖住瀏覽器,使用者其它操作必須等待請求完成才可以執行。

2、利用jquery ajaxprefilter中斷請求。

由於第一種方案只是一種曲線救國的方式,其實沒能真正的解決上面的問題。所以,建議使用這種方式。

var pendingrequests =

ajaxprefilter(function( options, originaloptions, jqxhr ) else

var complete =

= function(jqxhr, textstatus)

prefilters是一個預過濾器,在每個請求之前被髮送和$.ajax()處理它們前處理。

options 是請求的選項。

originaloptions 值作為提供給ajax方法未經修改的選項,因此,沒有ajaxsettings設定中的預設值。

jqxhr 是請求的jqxhr物件。

以上內容的核心思想是維護一個佇列,傳送請求時,將請求加入佇列,請求響應後,從佇列中清除,這就保證了在任一時刻只能有一個同樣的請求傳送。

侷限性:僅僅是前臺防止jquery的ajax請求。對於非jquery的ajax請求,不起作用。

因為使用的是jquery的ajaxprefilter函式,僅僅對jquery的ajax請求有作用。

呼叫abort後jquery會執行error的方法,丟擲abort的異常資訊。可以使用以下方式區分出該型別的異常。

怎樣防止今年凍瘡復發,怎麼防止凍瘡復發

凍瘡是冬天極為常見的 病。是由於冬季氣候寒冷,外露的 受到冷凍的刺激,時間一長,皮下小動脈發生痙攣收縮。產生血液瘀滯,使區域性組織缺氧,導致組織細胞受到損害。損害初為侷限性蠶豆或指蓋大小紫紅色腫塊或硬結,邊緣鮮紅,青紫,對稱性好發於四肢遠端,以手背及手指伸側 足緣及足趾伸側 下肢 面頰 耳廓等處多見...

怎樣防止癌症復發轉移癌症如何防止復發轉移

生物免疫細胞 可以單獨應用,也可與其他 方法聯合使用,而且聯合使用效果更好。nk細胞 自然殺手細胞 是一種存在先天免疫系統中起作用的淋巴細胞,不接受其他細胞的指令,只要發現癌細胞等異物,它就會進行攻擊。日本nk細胞 就是將nk細胞在體外大量培養,活化後並注射回體內,利用活化後的nk細胞的力量,通過誘...

Excel怎樣防止輸入重複的資料

選中本列 資料 有效性 允許 自定義 公式 輸入 countif a a,a1 2 出錯警告 自己設定 標題 比如 重複輸入 和 警告內容 b 列 同樣 如此設定,則 在輸入的時候會自己 出現警告 方案一 a列和b列,條件格式,使用公式 sumproduct a 1 a 10 一廠 b 1 b 10...