同一页面无法多次使用XmlHttp发起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>
分享到:
相关推荐
jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现
使用XMLHTTP POST 方式,实现远程请求
xmlHttp对象 手动AjaxxmlHttp对象 手动AjaxxmlHttp对象 手动Ajax
alexa_Xmlhttp_Ajax
手写ajax的xmlhttp协议,创建ajax
XmlHttp最大的用处是可以更新网页的部分内容而不需要刷新整个页面。来自MSDN的解释:XmlHttp提供客户端同http服务器通讯的协议。客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML...
一个完整的ajax xmlHttp请求类的封装,兼容多种浏览器,包括了对返回数据的处理。
ajax 获取单独页面 xmlhttp innerHTML ajaxtab 非常实用,简单易懂的ajax教程
AJAX asynchronouse javascript and xml 异步 javascript 和 xml ---------------------------------------------- B/S 发展历程------> web1.0 特点: 网站的内容 --- 网站的拥有者提供 网站的使用者所做的...
ajax技术中承载数据传输任务的xmlhttprequest介绍及其相关api
ajax的xmlhttp的帮助手册,这是一本基础性的帮助手册。对于初学者和入门者是一本不错的书籍。
asp做的AJAX查询系统.发你们咯~ 接好
用户页面 --显示信息,页面控制---- Javascript 后台程序 信息发送XmlHttp对象 -----信息发送,注册请求--- --------查询,更新---- 用户列表 -----服务器返回信息--------- ----返回最新列表----- ---...
xmlhttp中文帮助文档 Xmlhttp是一种浏览器对象, 可用于模拟http的GET和POST请求。配合JavaScript可以实现页面数据在无刷新下的定时数据更新,如果应用在聊天室、文字直播上可以取得较好的视觉效果。 使用范例: ...
主 题: 在VC中使用XMLHTTP,怎样初始化,怎样建立连接?在线等。 我的一段代码在.NET中用C#已经调通,我想搬到VC++ 6.0上,但不知道任何各种写法规则。 C# 中为: MSXML2.XMLHTTP xmlHttp_ = new ...
XMLHttp 手册 中文版 多 HTML 文件结构,浏览方便 只要有浏览器就行了 Ajax技术
XmlHttp手册XmlHttp手册XmlHttp手册XmlHttp手册XmlHttp手册
ajax之xmlhttp对象帮助文档
考试完了我反正没什么事,就写了篇文章详细地介绍一下Microsoft.XMLHTTP对象的使用,文章浅显,主要针对对这个对象不太了解的人。 首先,Microsoft.XMLHTTP是一个控件,而且是系统默认自带的控件(Windows98以下除外...
ajax和XMLHTTP的一些原理,挺好,都看看吧!