本文實例分析了ajax調(diào)用中ie緩存問題解決方法。分享給大家供大家參考,具體如下:
ajax請求調(diào)用的過程中發(fā)現(xiàn)的問題:后臺請求是一個簡單的.aspx文件,而這個頁面又沒有考慮過緩存的影響,使用ajax調(diào)試的時候發(fā)現(xiàn)有時候根本不走后臺代碼直接返回結(jié)果了,所以估計是受到瀏覽器緩存的影響。網(wǎng)上搜了一下,果然是緩存的問題:“IE中如果XMLHttpRequest提交的URL與歷史一樣則使用緩存,根本不向服務(wù)器端提交。因此無法取到剛提交的數(shù)據(jù)或新的數(shù)據(jù)”。
解決方法大致有下面幾種:
1、只改進服務(wù)器端
(1)后臺是簡單的.aspx文件,直接加上
復(fù)制代碼 代碼如下:
%@ OutPutCache Location="None"%>
即可。
(2)但是如果后臺是.ashx文件通常在類里直接修改緩存設(shè)置。
復(fù)制代碼 代碼如下:
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
2、只改進客戶端
(1)利用加隨機數(shù)或加時間戳改變請求地址
a、加隨機數(shù):
復(fù)制代碼 代碼如下:
var url='AjaxOperations.aspx?rdm='+Math.random()+'action='+op;
b、加時間戳:復(fù)制代碼 代碼如下:
var url='AjaxOperations.aspx?dtStamp='+new Date().getTime()+'action='+op;
這一種解決方案,只需要加個時間或隨機數(shù)作為參數(shù),服務(wù)器端不需要任何改動就可以達到目的。
(2)前臺異步調(diào)用設(shè)置XMLHttpRequest對象的屬性
在XMLHttpRequest發(fā)送請求之前加上
復(fù)制代碼 代碼如下:
XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
個人認為這個才是“正道”。因為你不能明確哪些ajax請求是需要還是不需要緩存的(解決網(wǎng)站的性能瓶頸,利用有緩存的ajax居多),所以每次在發(fā)送請求的時候確認一下是否要緩存,相對于2中的第(1)條顯然少寫了一個url參數(shù),而且服務(wù)器端(改進方法1)也不需要改變設(shè)置,但是對于已經(jīng)封裝好的ajax庫,你可能已經(jīng)不能在外面直接使用XMLHttpRequest對象了,通常的設(shè)置語法可能是將("If-Modified-Since","0")作為參數(shù)傳遞:ajaxObj.sendPost(其他參數(shù)列表,...."If-Modified-Since","0"); (post方式)
或者 ajaxObj.sendGet(其他參數(shù)列表,...."If-Modified-Since","0"); (get方式)
希望本文所述對大家ajax程序設(shè)計有所幫助。
您可能感興趣的文章:- ajax+php控制所有后臺函數(shù)調(diào)用
- jQuery Ajax調(diào)用WCF服務(wù)詳細教程
- jQuery調(diào)用ajax請求的常見方法匯總
- 使用ajax技術(shù)無刷新動態(tài)調(diào)用新浪股票實時數(shù)據(jù)
- jQuery ajax調(diào)用WCF服務(wù)實例
- ajax的定時調(diào)用每5秒調(diào)用一次
- iframe式ajax調(diào)用示例代碼
- jquery中的ajax方法怎樣通過JSONP進行遠程調(diào)用
- JavaScript調(diào)用ajax獲取文本文件內(nèi)容實現(xiàn)代碼
- iframe式ajax調(diào)用示例
- jquery.Ajax()方法調(diào)用Asp.Net后臺的方法解析
- ajax調(diào)用簡單實例