建议不要使用 onreadystatechange 

解决方案 »

  1.   

    可以这样吧//初始化函数块
    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 ;
    }
    }
    }
    };
      

  2.   

    同步请求相对容易处理。
    异步请求时(如:open("POST" , url , true))应该如何处理回调呢?
    if (xmlHttp.readyState == 4) 之后进行 xmlHttp=null; 是否能释放掉相关资源?
      

  3.   

    IE的内存释放是在于有没有function正在调用你的xmlhttprequest实例。
    这里占用xmlhttprequest内存的很明显是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);
    }; 
      

  4.   

    厄 
    xmlHttp.onreadystatechange = null;
    也可以改成
    this.onreadystatechange = null;