1. 程式人生 > >解決同一頁面無法多次使用XmlHttp發起Ajax的問題

解決同一頁面無法多次使用XmlHttp發起Ajax的問題

這兩天遇到一個問題:當該頁面第一次發出Ajax請求的時候可以正常執行,但是從第二次呼叫開始就完全沒有了反應。當然在firefox和ie中效果是不一樣的。在firefox中並沒有此問題。起先還一直以為是ie壞掉了。
之前有個錯誤的想法:就是XmlHttp只能使用一次send(),每次要使用新的XmlHttp。後來在js程式碼中添加了暴多alert硬是發現沒有什麼問題,每次servlet都過去了。
後來發現有這樣一個原因。由於IE瀏覽器有快取,第一次傳送的Ajax請求確實被髮送出去了。但是從第二次起IE瀏覽器發現快取裡面已經有請求的頁面,於是Ajax請求將不再被髮送出去。所以只要我們在url里加上+"&"+Math.random()就可以避免這個問題。當我做了這樣修改後果真就可以在同一頁面多次使用XmlHttp發起Ajax請求了。

附程式碼如下:
<script type="text/javascript">
function newXMLHttpRequest()
{
 var aVersions = ["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];
    var xmlreq = null;
    if (window.XMLHttpRequest)
    {
        try
        {
          xmlreq = new XMLHttpRequest();

        } catch (oError)
        {
          xmlreq = null;
        }
    }
    else if (window.ActiveXObject)
    {
            for (var i = 0; i < aVersions.length; i++ )
            {
                try
                {
            xmlreq = new ActiveXObject(aVersions[i]);
            if(xmlreq == null)
            {continue;}
            else{return xmlreq;}        
        }
        catch (oError)
        {
            xmlreq = null;
        }
        }
     }
       return xmlreq;
}


function CallFunc(phone)
{    
    var request =  null;
    request = newXMLHttpRequest();
    if(request==null) return;
      var url = "/ServletTest/Test?phonenum=" + phone + "&"+Math.random();
      request.open("GET", url, true);
      request.send(null);
}
</script>