这两天遇到一个问题:当该页面第一次发出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>