[原创]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
[原创]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因 |
小雨 发表于 2008-3-28 13:17:00 |
/************* 作者:小雨(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请求的真实原因相关推荐
- jq中法可以发起ajax请求的方法有,jQuery实现监控页面所有ajax请求的方法
本文实例讲述了jQuery实现监控页面所有ajax请求的方法.分享给大家供大家参考,具体如下: 你是不是有遇到这样的问题:页面发起两个ajax请求,希望它们都成功以后,再做一个动作? 很容易想到的解决 ...
- JQuery发起ajax请求,并在页面动态的添加元素
页面html代码: <li><div class="coll-tit"><span class="coll-icon">&l ...
- ajax出错并返回整个页面html的问题,【提问】ajax请求返回整个html页面
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 后台代码 @SuppressWarnings({ "rawtypes", "unchecked" }) @Requ ...
- html页面加载时执行ajax请求,函数在页面加载时发送ajax请求
我有下面的代码在页面加载运行.我只想在用户完成在文本框中写入时运行它.函数在页面加载时发送ajax请求 代码是: $(document).ready(function() { $("#use ...
- (原创)easyui 页面加载慢的原因及解决办法
Easyui 框架简单.易用,且功能丰富,可以满足大多的管理类网站开发的要求.但越开发到后面的时候, 总感觉页面加载越来越慢,有时打开一个页面需要好几秒甚至十几秒,这种体验是非常糟糕的. 刚开始还以 ...
- html 中ajax 请求没反应,ajax请求数据成功,页面的数据没有加载出来
w3c的ajax的例子,点击按钮,(ajax请求读取一个本地ajax.txt文件)页面展示其内容, 在chrome中打开页面,点击按钮请求成功,但是页面没有显示ajax.txt的内容,这是为什么呢? ...
- ajax请求数据渲染个人中心页面
1. 根据用户请求返回个人中心空模板文件数据 # 获取个人中心数据 @route("/center.html") def center():# 响应状态status = " ...
- jquery 同一个页面处理多个ajax请求
加一个参数 $.post( "doSysthFile.aspx", { type: '1' }, ...
- ajax请求的五个步骤_监控整个页面,非AJAX,需要通知
ajax请求的五个步骤 最近,在JSF中开发新图表和图表"导出服务"时,我遇到了一个非常普遍的问题. 当您执行长时间运行的任务(操作)时,您希望在开始时显示状态"请稍候- ...
最新文章
- influxdb java spring_Spring boot使用influxDB总结
- ORA-29275:部分多字节字符
- 力扣3. 无重复字符的最长子串 two pointer算法|滑动窗口|尺取法
- 写一个公用的gpio口驱动
- 腾讯天衍实验室新算法入选国际万维网大会 新冠疫苗AI问答上线
- 最新Java校招面试题及答案
- 加载本地json文件,并利用批处理调用Chrome显示html
- 转 Android中this、super的区别
- 本周ASP.NET英文技术文章推荐[07/22 - 07/28]:VS 2008、.NET 3.5、IronRuby、jQuery、ASP.NET AJAX、IIS7...
- mysql索引和事务_mysql的索引和事务详细解读
- button渐变色 ios_ios文字设置渐变色
- otsu算法详细推导、实现及Multi Level OTSU算法实现
- 影响世界的77部文学名著
- 2014年最新珍藏版XP系统GHO镜像文件下载,史上驱动最齐全XP终结版(定时更新)
- 学计算机科学与技术的考研方向,计算机科学与技术考研方向?
- Repository模式--采用EF Fluent API使用EntityTypeConfiguration分文件配置Model映射关系
- 用matlab绘制P三曲线,科学网—水文频率曲线及MATLAB绘制 - 张凌的博文
- linux--常用命令
- 微信小程序:enablePullDownRefresh、onReachBottomDistance 、动态设置窗口的背景色、动态设置下拉背景字体
- SUSCTF Ez_Pager_Tiper