關於AJAX請求伺服器後快取資料,造成沒有及時重新整理的問題

來源:互聯網
上載者:User

最近在做項目的時候,使用了ajax去請求伺服器的資料!剛開始還可以,我測試一切運行正常(我不是專業的測試人員哈!所以還是有些問題沒有測出來哈)!後來ajax請求的資料變化了,但是頁面資料沒有變,依然是第一次的資料!這個問題害我整了好大半天啊![還是自己技術不到位啊!] 沒辦法遇到問題還是要解決啊!只有硬著頭皮弄了撒! 因為ajax請求也是到後台頁面執行的,那就斷點吧! 嘿嘿,通過斷點我發現了問題! 每次ajax請求他只有第一次去後台,後面的他就不會去後台了!如果你其他按鈕把資料改變了,因為ajax第二次以後都不會去後台執行去資料了!所以資料沒有及時重新整理[資料被緩衝了,如果你重啟IE你修改的資料就可以看到了],有點希望了! 至少癥狀找到了撒!接下就是怎麼解決這個問題啊! 嘿,後來和Bobby同事提醒我在ajax的請求url後面加一個時間戳記參數試一試!  那就死馬當活馬醫了!反正我也沒有好的方法! 哈哈居然可以了! [在此感謝bobby](還是自己技術不到位啊!汗…) 後來去google了一下,多少人也遇到這個問題! 下面集自己的理解和網路上的一些資源解決這個問題!  [IE中如果XMLHttpRequest提交的URL與曆史一樣則使用緩衝,根本不向伺服器端提交。因此無法取到剛提交的資料]

我最初的做法: 下面的代碼運行後! 第一次點擊GetData按鈕顯示 demo , 當在點擊changDate改變資料後, 在點擊 GetData還是顯示 demo !而不是我們期望的changed data 字串! 這就是我最初遇到的問題! 當然下面只是一個簡單的demo而沒有太多的實際意義!

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ajax_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    <title></title>    <script runat="server">        private static string data = "demo";        protected void Page_Load(object sender, EventArgs e)        {            if (IsPostBack) return;            if (!string.IsNullOrEmpty(Request.QueryString["ajax"]))            {                Response.Write(data);                Response.End();            }        }        protected void Unnamed1_Click(object sender, EventArgs e)        {            data = "Changed data";        }    </script>    <script type="text/javascript">        function createXmlHttpRequest() {            if (window.ActiveXObject) {                return new ActiveXObject("Microsoft.XMLHTTP");            } else if (window.XMLHttpRequest) {                return new XMLHttpRequest();            }        }        function test() {            //ajax請求地址,就是本頁面哈            var url = "Default.aspx?ajax=true";            /*                解決方案: var url = "Default.aspx?ajax=true&random=" + Math.random();                         var url = "Default.aspx?ajax=true&random=" + new Date().getMilliseconds();                後面跟一個隨機數或者時間戳記保證他請求的url每次都不一樣!這樣就不會被緩衝                2.在send()方法之前設定setRequestHeader                  XMLHttpRequest.setRequestHeader("If-Modified-Since","0")            */            var xmlHttpRequest = createXmlHttpRequest();            xmlHttpRequest.onreadystatechange = function() {                if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) {                    var context = xmlHttpRequest.responseText;                    document.getElementById("divInfo").innerHTML = context;                }            }            xmlHttpRequest.open("GET", url, true);            //xmlHttpRequest.setRequestHeader("If-Modified-Since","0");            xmlHttpRequest.send(null);        }    </script></head><body>    <form id="form1" runat="server">    <input id="getData" type="button" value="GetData" onclick="test();" />    <div id="divInfo">        </div>    <asp:Button runat="server" Text="changDate" onclick="Unnamed1_Click" />    </form></body></html>

 

上面的2種方法,我已測試通過!並解決了我的問題!

Technorati 標籤: ajax
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.