解決ajax呼叫中ie的快取問題

2021-09-05 21:12:53 字數 1179 閱讀 7646

ajax請求呼叫的過程中發現的問題:後台請求是乙個簡單的.aspx檔案,而這個頁面又沒有考慮過快取的影響,使用ajax除錯的時候發現有時候根本不走後台**直接返回結果了,所以估計是受到瀏覽器快取的影響。網上搜了一下,果然是快取的問題:「ie中如果xmlhttprequest提交的url與歷史一樣則使用快取,根本不向伺服器端提交。因此無法取到剛提交的資料或新的資料」。

解決方法大致有下面幾種:

1、只改進伺服器端

(1)後台是簡單的.aspx檔案,直接加上<%@ outputcache location="none"%>即可。

(2)但是如果後台是.ashx檔案通常在類裡直接修改快取設定。

2、只改進客戶端

(1)利用加隨機數或加時間戳改變請求位址

a、加隨機數:var url='ajaxoperations.aspx?rdm='+math.random()+'&action='+op;

b、加時間戳:var url='ajaxoperations.aspx?dtstamp='+new date().gettime()+'&action='+op;

這一種解決方案,只需要加個時間或隨機數作為引數,伺服器端不需要任何改動就可以達到目的。

(2)前台非同步呼叫設定

物件的屬性

在xmlhttprequest傳送請求之前加上xmlhttprequest.setrequestheader("if-modified-since","0"),個人認為這個才是「正道」。因為你不能明確哪些ajax請求是需要還是不需要快取的(解決**的效能瓶頸,利用有快取的ajax居多),所以每次在傳送請求的時候確認一下是否要快取,相對於2中的第(1)條顯然少寫了乙個url引數,而且伺服器端(改進方法1)也不需要改變設定,但是對於已經封裝好的ajax庫,你可能已經不能在外面直接使用xmlhttprequest物件了,通常的設定語法可能是將("if-modified-since","0")作為引數傳遞:ajaxobj.sendpost(其他引數列表,...."if-modified-since","0"); (post方式)

或者 ajaxobj.sendget(其他引數列表,...."if-modified-since","0"); (get方式)

Ajax的IE快取問題

ajax的ie快取問題,會造成用open時用get方法不能重複提交。解決的辦法有以下幾種 1.客戶端在url後新增隨機數.new date gettime 或者math.random 或者送請求前加上 或者用post方法提交 2.伺服器端禁用快取.response.setheader pragma ...

解決IE中placeholder的相容問題

定義和用法 placeholder 屬性提供可描述輸入字段預期值的提示資訊 hint 該提示會在輸入欄位為空時顯示,並會在字段獲得焦點時消失。注釋 placeholder 屬性適用於以下的 型別 text,search,url,telephone,email 以及 password 問題 由於pla...

IE快取的解決方案

禁止伺服器端快取 response.expires 0 或禁用客戶端快取 htm網頁 asp網頁 response.expires 1 response.expiresabsolute now 1 response.cachecontrol no cache php網頁 header expires...