我创建的XMLHttpRequest如下:
function checkDependencyFormFilledStatus(appName,formName){
var xmlhttp;
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","checkFormDependency.action formName="+formName+"&applicationName="+appName,false);
xmlhttp.send();
var dependentFormEmptyStatus = Ext.JSON.decode(xmlhttp.responseText);
alert(xmlhttp.responseText);
return dependentFormEmptyStatus;
}
通过对象返回的响应取决于该操作类正在使用数据库上。
这在Firefox 10.0正常工作。
但对于IE7,它只返回的第一次正确的反应。 而对于函数调用的其余部分,则返回相同的响应(不管我们做什么样的变化在数据库中)。 它更新,只有当我关闭选项卡,打开它(即使不是在重新加载页面)其响应。
如何使它在IE 7中工作吗?
听起来就像是响应被缓存。
一个伪随机字符串(例如时间戳)添加到URI的端部到缓存突发。
你只是有缓存的问题与IE7的,因为它缓存了XMLHttpRequest()它创建后,并将其存储在内存中。 即使subsequents xmlhttp=new XMLHttpRequest();
变量没有得到任何分配新建分配FY因为它已经有一个实例 (从你的第一个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将每次找到一个空的引用,将有必要再重新创建每次使用。
如果你不想创建和删除eacht时候你只是一些HTTP报头中的XMLHTTPRequest的发挥
xmlHttp_global.setRequestHeader("If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 GMT");
xmlHttp_global.setRequestHeader("Cache-Control", "no-cache");
建议喜欢这里
另一种替代方案包括:
使用POST方法比GET方法
xmlHttp_global.open( “POST”, “checkFormDependency.action”,假); xmlHttp_global.setRequestHeader( “内容类型”, “应用程序/ x WWW的形式进行了urlencoded”); //或另一种内容类型,它取决于你xmlHttp_global.send( “表格名称=” +表格名称+ “&的applicationName =” + APPNAME);
在您的查询字符串使用“虚拟”变量来爆出的IE cacher的(7,6)
xmlHttp_global.open( “GET”, “checkFormDependency.action表格名称=” +表格名称+ “&的applicationName =” + APPNAME + “randomVar =” +的Math.random(),假);
链接
- XMLHTTPRequest的高速缓存在IE 7和6