日期:2014-05-16  浏览次数:20418 次

xmlHttpRequest对象 多次创建调用后,如何删除创建的对象!
以下JS代码可以请求html或xml:


var xmlHttpRequest=function(){
  var request = null;
  try {
  request = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e) {
  try {
  request = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
  try {
  request = new XMLHttpRequest();
  } catch (e) {
  request = false;
  }  
  }
  }
  if(request){
  return request;
  }else{
  return alert("Error initializing XMLHttpRequest!");
  }
}

function ajax_HttpRequest(url,data,callback,m){
  var request=new xmlHttpRequest();
  var res;
  request.open("POST", url, true);
  request.setRequestHeader("Content-type", (m?"text/xml":"application/x-www-form-urlencoded"));
  request.setRequestHeader("Content-length", data?data.length:0);
  request.setRequestHeader("Connection", "close");
  request.send(data);
  request.onreadystatechange=function(){
if (request.readyState == 4){
  if (request.status == 200){
if(request.responseText == 0){
request=null;
return callback(0);
}else{
res=m?request.responseXML.documentElement:request.responseText;
  request=null;
return callback(res);
}
  }else{
res = request.status;
request=null;
return callback(res);
}
  }
  }
}

需要快速即时刷新数据(2次/秒),但由于网络原因,请求可能不会及时返回,形成网络堵塞,在这种情况下会有很多还未结束的
xmlHttpRequest()对象,这时调用关键请求(第一优先级别的)也会无法及时返回,请问各位大哥怎样在调用关键请求前结束所有xmlHttpRequest()对象??


------解决方案--------------------
放全局变量里
遍历
------解决方案--------------------
你可以在request.onreadystatechange里面加一个setTimeOut(方法名,时间);设置一下时间request.readyState
还是不等于4,就卡叉掉.或者用楼上方法,全局变量
------解决方案--------------------
认同楼上意见
------解决方案--------------------
不建议同一时间存在两个以上的请求实例,会有性能问题,而且在ie6下肯定浏览器崩溃,建议使用连接池来处理你的请求对象