function ajax()
{
}
ajax.createXMLHttpRequest=function()
{
try
{
return new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
}
try
{
return new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
}
try
{
return new XMLHttpRequest();
}
catch(e)
{
}
alert("XMLHttpRequest对象无法创建! 请检查浏览器的安全设置! ");
return null;
};
ajax.synchronous_call=function(a_argument)
{
var url = "DbServlet?timeStamp=" + new Date().getTime();
var xmlHttp=ajax.createXMLHttpRequest();
xmlHttp.open("POST", url, false);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(a_argument);
return eval(xmlHttp.responseText);
};
ajax.asynchronous_call=function(a_argument, a_callback)
{
var url = "DbServlet?timeStamp=" + new Date().getTime();
var xmlHttp=ajax.createXMLHttpRequest();
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = function()
{
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200)
{
if(a_callback)
{
a_callback(eval(xmlHttp.responseText));
}
}
xmlHttp=null;
}
};
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(a_argument);
};
另外:请教一下ajax.asynchronous_call中的代码在异步方式中会瞬间执行完毕,可是其中的局部变量xmlHttp中对应的onreadystatechange 函数却仍然在有效工作,按常理会被释放无效的!是不是如果IE的GC能力增强之后这样写代码就不能正确执行了?
------解决方案--------------------
可以这样吧
//初始化函数块
var query = function(){} ;
//把方法作为参数传入按顺序直到其中的一个成功执行
var Try = {
these: function() {
var returnValue ;
for (var i = 0, length = arguments.length; i < length; i++)
{
var lambda = arguments[i] ;
try {
returnValue = lambda() ;
break;
}
catch (e) {}
}
return returnValue ;
}
};
//ajax应用,有xml方法和json方法可以到server端请求并返回数据
var ajax = query.prototype = {
create: function(){
return Try.these(
function() {return new XMLHttpRequest()},
function() {return new ActiveXObject('Msxml2.XMLHTTP')},
function() {return new ActiveXObject('Microsoft.XMLHTTP')}
) || false ;
},
xml: function(sXML , sURL){
var oXML = new ActiveXObject("MSXML2.DOMDocument") ;
oXML.async = false;
oXML.loadXML(sXML);
var xmlResult = this.post(oXML, sURL) ;
return xmlResult.xml ;
},
post: function(oXML , sURL){
var oXmlHttp = this.create() ;
oXmlHttp.Open("POST" , sURL , false) ;
oXmlHttp.Send(oXML) ;
return oXmlHttp.responseXML ;
},
json: function(url , type){
var obj = this.create() ;
obj.open("POST" , url , false) ;
obj.send(null) ;
if (obj.responseText != "") {
if (type == 'text'){
return obj.responseText ;
}
else {
eval("var data = " + obj.responseText) ;
return data ;
}
}
}
};
------解决方案--------------------
IE的内存释放是在于有没有function正在调用你的xmlhttprequest实例。
这里占用xmlhttprequest内存的很明显是
- JScript code
ajax.asynchronous_call=function(a_argument, a_callback) { var url = "DbServlet?timeStamp=" + new Date().getTime(); var xmlHttp=ajax.createXMLHttpRequest(); xmlHttp.open("POST", url, true); xmlHttp.onreadystatechange = function()//就这个functiun占用了 xmlHttp导致内存无法释放 { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { if(a_callback) { a_callback(eval(xmlHttp.responseText)); } } xmlHttp.onreadystatechange = null; //在这里多加一条应该就可以完全释放内存了 xmlHttp=null; } }; xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttp.send(a_argument); };