[转] 同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
来源:互联网 发布:php在线文档系统 编辑:程序博客网 时间:2024/05/14 23:38
/*************
作者:小雨(QQ群群号17639373)
声明:本文完全原创,非商业目的的转载请回复注明转载地址,谢绝商业性质转载
*************/
最近在一项任务中,团队老大要求我使用Ajax避免影响用户体验,于是我开始了Ajax的征程,虽说Ajax本身不难,但是我还是遇到了一些问题:当该页面第一次发出Ajax请求的时候可以正常运行,但是从第二次调用开始我惊奇的发现——onreadystatechange()事件再也没有被调用!
于是我上Google查了一下,发现还有不少人为此感到困扰,而且发现很多人持有的是这个错误的观点:
他们说这是因为一个XmlHttp只能使用一次send(),每次要使用新的XmlHttp。但是我的XmlHttp是函数内的局部变量,函数执行完毕它就会被销毁啊,而且即使我在函数的开头把它赋值null也没有用。
/*然后我发现一个十分有意义的帖子
*/
原来是这个原因,由于IE浏览器有缓存,第一次发送的Ajax请求确实被发送出去了,也接收到了回应,所以就触发了onreadystatechange()事件。但是从第二次起IE浏览器发现缓存里面已经有请求的页面,于是Ajax请求将不再被发送出去,这样当然也不会触发onreadystatechange()事件了。所以只要我们在Url里加上+"&"+Math.random()就可以避免这个问题。当我做了这样修改后果真就可以在同一页面多次使用XmlHttp发起Ajax请求了。接着我把xmlhttp = null删除掉也仍然可以正常运行了。
附代码如下:
<script type="text/javascript">
function createXHR() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
}
if (window.ActiveXObject) {
var msxmls = ['MSXML3', 'MSXML2', 'Microsoft']
for (var i=0; i < msxmls.length; i++) {
try {
return new ActiveXObject(msxmls[i]+'.XMLHTTP')
} catch (e) { }
}
throw new Error("No XML component installed!")
}
}
</script>
<script type="text/javascript">
function refreshComment() {
var xmlhttp = createXHR();
var xmlhttpUrl = "flash.aspx?ajax=refresh&"+Math.random();
xmlhttp.open("GET", xmlhttpUrl, true);
xmlhttp.send(null);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
// alert("xmlhttp.status = " + xmlhttp.status);
// alert("xmlhttp.readyState = " + xmlhttp.readyState);
divCommentList.innerHTML=xmlhttp.responseText;
}
}
}
}
</script>
- [转] 同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
- [转载]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
- [原创]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
- 同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
- 同一页面无法多次使用XmlHttp发起Ajax请求
- 解决同一页面无法多次使用XmlHttp发起Ajax的问题
- Ajax请求无法下载文件的原因
- Ajax 同一页面同时执行多个 XMLHTTP
- Ajax 同一页面同时执行多个 XMLHTTP
- Ajax 同一页面同时执行多个 XMLHTTP
- 使用XmlHttp编写兼容多浏览器的ajax WEB页面
- Ajax发起GET请求的乱码问题
- 在iOS10系统中微信中后退无法发起ajax请求的问题
- 【微信小程序】下拉加载多次请求的解决方案,避免用户多次发起请求降低业务处理。
- ajax请求php页面中生成的session,无法在其他普通php页面使用
- ajax发起post请求
- XMLHTTP的简单使用(Ajax)
- Ajax中的XMLHttp请求
- 呵呵
- java.lang.OutOfMemoryError
- C++中的static(二)
- 动态建模
- c++笔试题目
- [转] 同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
- mm_menu.js参数说明
- 可行性研究
- mm_menu.js的使用,修改,调用
- PHP 动态获取变量,方法和类
- dwr+spring security在方法权限判断失败后的一个问题
- 软件工程概述
- WeTab运用MeeGo操作系统
- 面向过程的软件设计方法