IE下Ajax緩存問題的快速解決方法(get方式)
折騰了半天,程序中使用jquery的load方法進行請求,很奇怪為啥第二次無法發(fā)送請求。百度了一把,誰知load是用get方式進行請求的,因此IE瀏覽器對
其進行緩存了。網(wǎng)上搜了很多解決方案,一大把,下面是我認為比較全面的解決方案。主要分為客戶端解決和服務端解決。
1.客戶端解決方案
IE訪問策略:Internet選項--瀏覽歷史記錄--設置-- Internet 臨時文件的選項改為每次訪問網(wǎng)頁時也可以
1: 在AJAX請求的頁面后加個隨機函數(shù),我們可以使用隨機時間函數(shù)
在javascript發(fā)送的URL后加上t=Math.random()
例如這樣:URL+"&"+"t="+Math.random();或者new Date();
2: 在XMLHttpRequest發(fā)送請求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
一般情況下,這里的XMLHttpRequest不會直接使用
你應該可以找到這樣的代碼
XXXXX.send(YYYYYY);
那么,就把它變成
XXXXX.setRequestHeader("If-Modified-Since","0");
XXXXX.send(YYYYYY);
實踐證明,兩種方法都非常有效。
1、在服務端加 header("Cache-Control: no-cache, must-revalidate");
2、在ajax發(fā)送請求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0");
3、在ajax發(fā)送請求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");
4、在 Ajax 的 URL 參數(shù)后加上 "?fresh=" + Math.random(); //當然這里參數(shù) fresh 可以任意取了
5、第四種方法和第三種類似,在 URL 參數(shù)后加上 "?timestamp=" + new Date().getTime(); //推薦使用這種方式
6、用POST替代GET:不推薦
2.服務器端解決方案:
以Struts2為例:
Struts2 Server端用法
Xml代碼
<package name="json-nocache" extends="json-default">
<interceptors>
<interceptor name="cachingHeadersInterceptor" class="com.ssa.pct.web.interceptor.CachingHeaderInterceptor" />
<interceptor-stack name="defaultSecurityStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="cachingHeadersInterceptor" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultSecurityStack" />
</package>
Java代碼
public class CachingHeaderInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = invocation.getInvocationContext();
HttpServletResponse response = (HttpServletResponse) context.get(StrutsStatics.HTTP_RESPONSE);
if (response != null) {
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "-1");
}
return invocation.invoke();
}
}
相關文章
本地Bootstrap文件字體圖標引入?yún)s無法顯示問題的解決方法
這篇文章主要為大家詳細介紹了本地Bootstrap文件字體圖標引入?yún)s無法顯示問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12javascript 觸發(fā)HTML元素綁定的函數(shù)
只能觸發(fā)函數(shù)的執(zhí)行,并不能完全模擬出實際的點擊。2010-09-09JavaScript判斷數(shù)據(jù)類型有幾種方法及區(qū)別介紹
這篇文章主要介紹了JavaScript判斷數(shù)據(jù)類型有幾種方法及區(qū)別介紹,本文給大家分享多種方法通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09electron-builder允許安裝時請求提升權限的場景分析
electron-builder 作為一個用于 Electron 應用程序打包的工具,需要下載并使用 Electron 運行時來創(chuàng)建可執(zhí)行文件,這篇文章給大家介紹electron-builder允許安裝時請求提升權限的相關知識,感興趣的朋友跟隨小編一起看看吧2024-03-03