解決同一頁面無法多次使用XmlHttp發起Ajax的問題
阿新 • • 發佈:2019-02-10
這兩天遇到一個問題:當該頁面第一次發出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>
之前有個錯誤的想法:就是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>