回复楼上的已经测试出来了在每次send请求时,ajax对象未释放资源。。就是一次send就创建一次对象希望各位大侠能否帮我改一下这个ajax.js的这个库

解决方案 »

  1.   

    关键是实例化这段代码_getInstance:function(){ 
    for(var i=0;i <this._objPool.length;i++){ 
    if(this._objPool[i].readyState ==0||this._objPool[i].readState==4){ 
    return this._objPool[i]; 


    this._objPool[this._objPool.length] = this._createObj(); 
    return this._objPool[this._objPool.length-1]; 
    }, 总是create新的对象。。总是走 “this._objPool[this._objPool.length] = this._createObj(); 
    return this._objPool[this._objPool.length-1]; ”这个代码,不能重复利用对象
      

  2.   

    对象池this._objPool[]//不加限制的增大,这样会撑坏内存
    可以重载对象啊
    _objPool: []数组池换成可以覆盖的对象;
    _ajaxObj: null
    然后用的时候覆盖就可以了;
    this._ajaxObj= this._createObj(); 
    或者你在每一次用完this._objPool[]的时候都给objPool晴空
      

  3.   

    1、可以缓存objXMLHttp对象,重复利用
    2、通过objXMLHttp == null;CollectGarbage();来回收不再使用的资源。
      

  4.   

    你好。各位楼上的楼上十分感谢。。请问
    “对象池this._objPool[]//不加限制的增大,这样会撑坏内存 
    可以重载对象啊 
    _objPool: []数组池换成可以覆盖的对象; 
    _ajaxObj: null 
    然后用的时候覆盖就可以了; 
    this._ajaxObj= this._createObj(); 
    或者你在每一次用完this._objPool[]的时候都给objPool晴空”这个我不太明白,,具体代码加载在哪里啊?
      

  5.   


    请问CollectGarbage()这个函数直接放在ajax库中吗?
      

  6.   

    更改成对象 在代码上更改的多.
    清空的那个加这里
    _getInstance:function(){ 
    if(this._objPool[0].readyState ==0||this._objPool[0].readState==4){ 
    return this._objPool[0]; 
    } this._objPool[0] = this._createObj(); 
    return this._objPool[0]; 
    }这样简单些
      

  7.   

    改对象的var XMLHttp = { 
    _xmlHttpObj: null, _getInstance:function(){ 
    if(this._xmlHttpObj.readyState ==0||this._xmlHttpObj.readState==4){ 
    return this._xmlHttpObj; 

    this._xmlHttpObj = this._createObj(); 
    return this._xmlHttpObj; 
    }, _createObj:function(){ 
    if(window.XMLHttpRequest){ 
    var objXMLHttp = new XMLHttpRequest(); 
    }else{ 
    var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP']; 
    for(var n = 0;n < MSXML.length;n++){ 
    try{ 
    var objXMLHttp = new ActiveXObject(MSXML[n]); 
    break; 
    }catch(e1){ } 

    } if(objXMLHttp.readyState == null){ 
    objXMLHttp.readyState = 0; 
    objXMLHttp.addEventListener("load",function(){ 
    objXMLHttp.readyState ==4; 
    if(typeof objXMLHttp.onreadystatechange =='function'){ 
    objXMLHttp.onreadystatechange(); 

    },false); 

    return objXMLHttp; 
    }, 
    sendReq:function(method,URL,data,callback){ 
    var objXMLHttp = this._getInstance(); 
    with(objXMLHttp){ 
    try{ 
    if(URL.indexOf("?")>0){ 
    URL += "&randnum=" + Math.random(); 
    }else{ 
    URL += "?randnum=" + Math.random(); 

    open(method,URL,true); 
    //setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8'); 
    setRequestHeader("Content-Type","text/xml"); 
    send(data); 
    onreadystatechange = function() 

    if((objXMLHttp.readyState == 4)&&(objXMLHttp.status == 200||objXMLHttp.status ==304)) 

    callback(objXMLHttp); 
    objXMLHtt=null;//还要加上清空


    }catch(E){ 
    alert(E); 



    }; 
    另外你应该在
      

  8.   

    变量会不会冲突 
    比如你上面那个getCallbackFunc里的XMLHttp.sendReq('POST',url ,data, getCallbackFunc); 
    XMLHttp是哪儿来的 下面AJAX函数库这样写的 
    var XMLHttp = { 
    ... } 我觉得你的"AJAX"函数库有问题 
    下面objXMLHttp对象创建后你怎么在外部调用? 
    _createObj:function(){ 
            if(window.XMLHttpRequest){ 
                var objXMLHttp = new XMLHttpRequest(); 
            }else{ 
                var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP']; 
                for(var n = 0;n < MSXML.length;n++){ 
                try{ 
                    var objXMLHttp = new ActiveXObject(MSXML[n]); 
                    break; 
                }catch(e1){} 
            } 这里的objXMLHttp从何而来? 
    if(objXMLHttp.readyState == null){
    ...
      

  9.   

    11楼疑问_createObj:function(){ 
    if(window.XMLHttpRequest){ 
    var objXMLHttp = new XMLHttpRequest(); 
    }else{ 
    var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP']; 
    for(var n = 0;n < MSXML.length;n++){ 
    try{ 
    var objXMLHttp = new ActiveXObject(MSXML[n]); 
    break; 
    }catch(e1){ } 

    } if(objXMLHttp.readyState == null){ 
    objXMLHttp.readyState = 0; 
    objXMLHttp.addEventListener("load",function(){ 
    objXMLHttp.readyState ==4; 
    if(typeof objXMLHttp.onreadystatechange =='function'){ 
    objXMLHttp.onreadystatechange(); 

    },false); 

    return objXMLHttp; 
    }
    着是整个的方法 return objXMLHttp
    var objXMLHttp = new XMLHttpRequest(); 

    var objXMLHttp = new ActiveXObject(MSXML[n]); 
      

  10.   

    当然,楼主这么写不和标准
    应当先声明变量,再赋值
    var objXMLHttp = null;
     objXMLHttp = new XMLHttpRequest(); 
     objXMLHttp = new ActiveXObject(MSXML[n]); 
    尽管你try了一下.若的不到  objXMLHttp 
    下面也回报错的
      

  11.   

    谢谢各位。我改改实验一下,但是我一写objXMLHttp=null;就包语法错误啊
      

  12.   

    你好楼上的
    _xmlHttpObj: null, _getInstance:function(){ 
    if(this._xmlHttpObj.readyState ==0||this._xmlHttpObj.readState==4){ 
    return this._xmlHttpObj; 

    this._xmlHttpObj = this._createObj(); 
    return this._xmlHttpObj; 
    }, 
    这段代码报错,this._xmlHttpObj has no properties  请问这个是怎么回事啊?麻烦在看一下
      

  13.   

    晕 只在ie下测了.
    初始化变量的时候没有指定类型;
     因为this._xmlHttpObj为null了,故没有readyState和readState 这个属性,
    无妨,做下判断,_getInstance:function(){ 
    if(this._xmlHttpObj!=null && (this._xmlHttpObj.readyState ==0||this._xmlHttpObj.readState==4)){ 
    return this._xmlHttpObj; 

    this._xmlHttpObj = this._createObj(); 
    return this._xmlHttpObj; 
    },