多個AJAX請求問題總結

我們常常會遇到在一個頁面上有多個AJAX請求的情況。這些AJAX請求有可能是互不相關的。也有可能是互相影響的。這裏總結一下多個AJAX之間會存在一定影響的情況。

而相互影響的數據也會分爲不同的情況。我接觸過的主要有:
1.多個AJAX返回的是同一個數據的不同部分。我們需要在前端把這些數據組合成一個完整的數據來運用。我們要知道這些數據的次序來夠正確拼接。
2.不同查詢條件下的同一組數據。(我們可能需要的是最新的一組數據)。
3.後面的AJAX要用到的前面AJAX的數據。

不考慮應用場景,只說獲得AJAX返回順序的方法。用過的主要有下面幾種:
1.遞歸,在回調函數中執行下一個AJAX。問題是如果中間某一個AJAX沒有正常返回,後面的AJAX就有不執行的風險。所以可能需要做一些特別的處理。
2.同步AJAX。 不是很推薦。瀏覽器分分鐘失去響應。嚴重影響用戶體驗。
3.方法三.從回調函數上面想辦法。可以用閉包來記錄當前是第幾組的AJAX請求,回調函數中讀取。正常發起AJAX請求即可。
4.前後臺的協商。對於不需要保證返回順序。只需要確定所返回結果是對應第幾組數據的。  可以AJAX傳遞當前是第幾組數據的標識。後臺返回結果的時候再把這個標識返回過來。這樣回調函數也能識別到拼裝的次序。但是這種情況有限制,對於一些網絡公共接口,它返回的數據不是我們能左右的。

其中數據有依賴關係的可選擇1,2。
數據無依賴關係但是要知道數據順序的可使用1,2,3,4。

一些需要多個AJAX場景應用參考:
一、選擇查詢條件並隔一段時間實時刷新,雙如實時顯示地圖繪製。實時繪製圖表等等。後面的數據要刷新前面的數據。比如狀態的實時更新。
1.更新了查詢條件。中斷當前所有AJAX請求。清空AJAX序列的數組。發起AJAX請求。是定時發送請求。隔一段時間發起一次請求。
2.未更新查詢條件。隔一段自動刷新數據。理論上我們只需要最新一組數據。
    (1)設置超時,超時的時間不要超過請求的間隔。這樣當發起新的AJAX的時候。上一個AJAX已經返回結果或者超時取消了。
    (2)如果網絡條件特別差。超時的時間或兩次AJAX請求之間的間隔又比較短的話。如果我們超時時間比請求時間短。那就可能一組數據都拿不下來。頁面一直處於發呆狀態。。。所以一種方案是不設置超時,能拿下來一組數據是一組數據。拿到數據之後再清除AJAX序列中此請求前面的AJAX請求或者簡單點中斷當前所有在請求的AJAX。  

二、百度地圖批量座標轉換。使用的方法三。

三。實時地圖軌跡。
。。。

其他參考:
1.AJAX中斷可自行查詢 AJAX的abort()相關方法。
2.我封裝的一個JSONP函數參考。實現了error和超時功能。http://blog.csdn.net/liusaint1992/article/details/50959571
3.AJAX序列的問題。   把所有的AJAX請求放到一個數組中去,方便控制。類似這樣:       
  var xhr = $.ajax({
                url: '__SELF__',
                type: 'get',
                dataType: 'json',
                cache:false,
                data: {stationid: StationID
                },
                success:function(data){
            });
   xhrArr.push(xhr);


本文爲個人使用總結,有未盡之處,錯誤之處也是難免。歡迎留言交流。
文章可能會有修改,轉載註明出處:http://blog.csdn.net/liusaint1992/article/details/51800741

7月1號了,2016年過去一半。今年的目標實現一半了嗎?




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章