您只是在使用 IE7 时遇到了缓存问题,因为它在创建 XMLHttpRequest() 并将其存储在内存中之后对其进行了缓存。即使有后续xmlhttp=new XMLHttpRequest();
变量,也不会得到任何赋值,因为它已经有一个实例(从你的第一个xmlhttp=new XMLHttpRequest();
)。
您需要做的是在每次使用后使您的 XMLHttpRequest 请求无效并销毁。
您首先像这样创建您的 XMLHttpRequest(对于 msie 7):
function createXMLHttpRequest(){
var xmlHttp = null;
if(typeof XMLHttpRequest != "undefined"){
xmlHttp = new XMLHttpRequest();
}
else if(typeof window.ActiveXObject != "undefined"){
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP.4.0");
}
catch(e){
try {
xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e){
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
xmlHttp = null;
}
}
}
}
return xmlHttp;
}
所以每次在您要使用的功能中创建它。
function checkDependencyFormFilledStatus(appName,formName){
if(xmlHttp_global){
xmlHttp_global.abort(); // abort the current request if there's one
}
// Create the object each time a call is about to be made
xmlHttp_global = createXMLHttpRequest();
if(xmlHttp_global){
xmlHttp_global.onreadystatechange = myCallbackFunction; // make you callback thing here
xmlHttp_global.open("GET","checkFormDependency.action formName="+formName+"&applicationName="+appName,false);
xmlHttp_global.send(null);
}
}
在您的回调(“onreadystatechange”函数)中,您在使用它后将其删除
function myCallbackFunction()
{
if(xmlHttp_global && xmlHttp_global.readyState == 4){
//do your thing here and ... or nothing
var dependentFormEmptyStatus = Ext.JSON.decode(xmlhttp.responseText);
alert(xmlhttp.responseText); // like this for example?
xmlHttp_global = null; //delete your XMLHTTPRequest
}
}
因此 IE 7 每次都会找到一个空引用,并且每次使用都需要重新创建它。
如果您不想每次都创建和删除它,您只需在 XMLHTTPRequest 中使用一些 HTTP-Headers
xmlHttp_global.setRequestHeader("If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 GMT");
xmlHttp_global.setRequestHeader("Cache-Control", "no-cache");
喜欢这里的建议
另一种选择包括:
在 GET 方法上使用 POST 方法
xmlHttp_global.open("POST","checkFormDependency.action",false); xmlHttp_global.setRequestHeader("内容类型","application/x-www-form-urlencoded"); // 或其他内容类型,由您决定 xmlHttp_global.send("formName="+formName+"&applicationName="+appName);
在查询字符串中使用“虚拟”变量来爆出 IE(7,6) 的缓存器
xmlHttp_global.open("GET","checkFormDependency.action formName="+formName+"&applicationName="+appName+"randomVar="+Math.Random(),false);
链接