var http_request; //在外面申明对象,主要为了在updatePage中使用 //无刷新更新内容 function post(url,parameter) { if(http_request==null) { http_request = getHttpRequest(); } if (!http_request) { alert("XMLHttpRequest 初始化失败!"); } else { //在url尾部加一个rnd随机数,这样就不会发生读取ie缓存 if(url.indexOf("?") > -1) { url = url + "&rnd=" + Math.random(); } else { url = url + "?rnd=" + Math.random(); } http_request.open("POST", url, false); //打开请求 //false 同步, true 异步 http_request.onreadystatechange = updatePage; //设置回调方法 http_request.setRequestHeader("Content-length", parameter.length); http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); http_request.send(parameter); //发送请求 } } //回调方法 function updatePage() { if (http_request.readyState == 4) { if(http_request.status == 200) { alert("..."); // } } }
测试发现,在chrome 26下,如果申明了一个公共的变量:http_request
然后多次重复使用XMLHttpRequest时,如果Post时,传递了参数(内容),那么会连续执行2次回调函数: updatePage()
如果Post时没有传参数(内容),只会执行1次回调函数: updatePage()
在firefox和ie下测试,只会执行1次回调函数: updatePage()
解决在chrome 26下遇到的这个问题,也很简单,每次使用http_request(XMLHttpRequest)时,都重新初始化一下:
http_request = getHttpRequest();