在頁面中有多個按鈕,點選該按鈕可以非同步的去服務端讀取資料,然後在前端將資料展示出來。 每個按鈕點選請求的頁面都是同乙個,但是請求的引數不同,所以返回的內容就不同。 在連續點選多個按鈕的時候就會發出多個非同步請求。那麼根據請求返回的快慢(因為不同按鈕引數不同,返回內容不同,所以會有快慢之分),資料會依次的展示出來,那麼就會出現乙個先點選的按鈕,由於他請求的資料量比較大,導致資料被後顯示出來。
一、問題解決
解決這種問題有兩種方式:
二、解決方案
1、將ajax請求的async設定為false
$.ajax(
});async
2、利用jquery ajaxprefilter中斷請求
由於第一種方案只是一種曲線救國的方式,其實沒能真正的解決上面的問題。所以,建議使用這種方式。
var pendingrequests = {};
$.ajaxprefilter(function( options, originaloptions, jqxhr ) else
var complete = options.complete;
options.complete = function(jqxhr, textstatus)
};});
prefilters是乙個預過濾器,在每個請求之前被傳送和$.ajax()處理它們前處理。
以上內容的核心思想是維護乙個佇列,傳送請求時,將請求加入佇列,請求響應後,從佇列中清除,這就保證了在任一時刻只能有乙個同樣的請求傳送.
侷限性:僅僅是前台防止jquery的ajax請求。對於非jquery的ajax請求,不起作用。因為使用的是jquery的ajaxprefilter函式,僅僅對jquery的程式設計客棧ajax請求有作用。
呼叫abort後jquery會執行error的方法,丟擲abort的異常資訊。可以使用以下方式區分出該型別的異常。
var ajax = $.ajax(
}})三、demo
按鈕每次點選都會向後端傳送請求,下面的demo實現了多次點選按鈕之後,只保程式設計客棧證最後一次點選的請求能夠成功。
以上就是解決重**送ajax請求的方案,希望對大家的學習有所幫助。
本文標題: 防止重**送ajax請求的解決方案
本文位址:
HTTPWebRequest請求 重複傳送
使用httpwebrequest請求別人的介面,請求了一次,但是對方卻收到了兩次同樣的請求,而且間隔時間為一分鐘,並且只有處理資料比較多的時候才會出現。因為我自己的 裡是有設定超時時間的,且時間設定的是5分鐘,webrequest.timeout 300000 排查了很久,最後發現是因為對方使用的 ...
迴圈傳送ajax請求的解決方法
今天需要用js 迴圈傳送ajax請求,獲取資訊,一開始,就直接按照邏輯寫,for var i 0 i test test 實際結果卻非如此,輸出如下 test test test 而且得到的img還都是一樣的,這個結果,顯然不是我要的,怎麼辦,想了很久,查資料,參考 終於搞定,運用遞迴,如下 cur...
ajax傳送非同步請求的步驟
1.第一步 得到xmlhttprequest ajax要學習乙個物件 xmlhttprequest 編寫建立xmlhttprequest物件的函式 得到xmlhttprequest 2.第二步 開啟與伺服器的連線 xmlhttp.open 用來開啟與伺服器的連線,它需要三個引數 請求方式 可以是ge...