同一页面无法多次使用XmlHttp发起Ajax请求的真实原因

用VBS实现的发送带Cookie的HTTP请求的代码 在昨天的《使用正确版本的XMLHTTP》中卖了个关子,ServerXMLHTTP的功能比XMLHTTP强大,你现在大概已经猜到了吧。没错,用ServerXMLHTTP可以在HTTP请求头中加入Cookie,而XMLHTTP不可以 立即下载
最近在一项任务中,团队老大要求我使用Ajax避免影响用户体验,于是我开始了Ajax的征程,虽说Ajax本身不难,但是我还是遇到了一些问题:当该页面第一次发出Ajax请求的时候可以正常运行,但是从第二次调用开始我惊奇的发现——onreadystatechange()事件再也没有被调用!
于是我上Google查了一下,发现还有不少人为此感到困扰,而且发现很多人持有的是这个错误的观点:
他们说这是因为一个XmlHttp只能使用一次send(),每次要使用新的XmlHttp。但是我的XmlHttp是函数内的局部变量,函数执行完毕它就会被销毁啊,而且即使我在函数的开头把它赋值null也没有用。
/*然后我发现一个十分有意义的帖子
*/
原来是这个原因,由于IE浏览器有缓存,第一次发送的Ajax请求确实被发送出去了,也接收到了回应,所以就触发了onreadystatechange()事件。但是从第二次起IE浏览器发现缓存里面已经有请求的页面,于是Ajax请求将不再被发送出去,这样当然也不会触发onreadystatechange()事件了。所以只要我们在Url里加上+"&"+Math.random()就可以避免这个问题。当我做了这样修改后果真就可以在同一页面多次使用XmlHttp发起Ajax请求了。接着我把xmlhttp = null删除掉也仍然可以正常运行了。
附代码如下:
  1. <script type="text/javascript">
  2. function createXHR() {
  3.     if (window.XMLHttpRequest) {
  4.         return new XMLHttpRequest();
  5.     }
  6.     if (window.ActiveXObject) {
  7.         var msxmls = ['MSXML3', 'MSXML2', 'Microsoft']
  8.         for (var i=0; i < msxmls.length; i++) {
  9.             try {
  10.                 return new ActiveXObject(msxmls[i]+'.XMLHTTP')
  11.             } catch (e) { }
  12.         }
  13.         throw new Error("No XML component installed!")
  14.     }
  15. }
  16. </script>
  17. <script type="text/javascript">
  18. function refreshComment() {
  19.     var xmlhttp = createXHR();
  20.     var xmlhttpUrl = "flash.aspx?ajax=refresh&"+Math.random();
  21.     xmlhttp.open("GET", xmlhttpUrl, true);
  22.     xmlhttp.send(null);
  23.     xmlhttp.onreadystatechange = function () {
  24.         if (xmlhttp.readyState == 4) {
  25.             if (xmlhttp.status == 200) {
  26. //                alert("xmlhttp.status = " + xmlhttp.status);
  27. //                alert("xmlhttp.readyState = " + xmlhttp.readyState);
  28.                divCommentList.innerHTML=xmlhttp.responseText;
  29.             }
  30.         }
  31.     }
  32. }
  33. </script>
聊一聊固态电池和钠离子电池新技术 总之,固态电池是一种“安全又高效的未来电池”,它的好处非常明显,但目前还处于研发阶段,离普及还有一段距离。未来,这两种技术可能会与锂离子电池并存,分别满足不同的市场需求。我尝试用最通俗易懂的语言将复杂的技术讲给大家听。钠离子电池和锂离子电池的工作原理很相似,但它用的是。固态电池和钠离子电池是两种正在研发和推广的。,它们有潜力解决现有锂离子电池的部分缺点。,而不是锂(Li)。 阅读详情

相关推荐

Cadence OrCAD: 层次化设计 Hierarchical Design

详细介绍OrCAD的原理图层次化设计方法。

Fantasy237的博客 1万+

同一页面无法多次使用XmlHttp发起Ajax请求的真实原因--l转

同一页面无法多次使用XmlHttp发起Ajax请求的真实原因    当该页面第一次发出Ajax请求的时候可以正常运行,但是从第二次调用开始发现——onreadystatechange()事件再也没有被调用!于是上Google查了一下,发现还有不少人为此感到困扰,而且发现很多人持有的是这个错误的观点:他们说这是因为一个XmlHttp只能使用一次send(),每次要使用新的XmlHttp。但是我的...

iteye_582的博客 268

浅谈一下小波变换和EEG信号处理

浅谈小波变换,总结不是很到位,请大家指正。

qq_45045249的博客 2864

AJAX 多次发送异步请求的 XmlHttpRequest 对象的设置

<br />业务需求:<br />第一步:加载商品类别,点“加载种类” 按钮<br /> <br /><br /> <br />第二步:选择商品种类显示该类别的所有商品,也是异步请求:<br /> <br /><br /> <br />这时要注意xmlHttpRequest的创建及 onreadystatechange 回调函数的设置<br /><br /><br /><html><br />  <head><br />    <base href="<%=basePath%>"><br />    <ti

孔繁玉的专栏 3246

头歌 操作系统 课堂练习2.1:外部中断 第2关:第一次时钟中断

将答案0x796c输入到workspace/mushixun/恢复点的地址.txt中的括号里即可,随后使用kill命令防止对第三关的环境造成影响。

Yinfrey的博客 6091

信号转换为图像 时域频域分析

一维信号如何转化为图像?深度学习如何学习 1.当然,直接1d卷积也是可以的。 2. 以信号强度的数值作为纵坐标,以时间为横坐标绘制信号点就可以了。 周霖那个即是 要看看代码是如何做的, 即使是单导联 5000个点,怎么变成50005000的分辨率的 3. 直接把多通道的一维信号合并成二维图像,然后直接按图像卷积的方法去做~~ 2225000这样一个图 ~可以看看语音处理的相关Net,其中比较...

王不留行嘿呦嘿 2万+

[转载]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因

原文地址:http://www.bloger.com.cn/user1/4237/404865.html 作者:小雨(QQ群群号17639373)声明:本文完全原创,非商业目的的转载请回复注明转载地址,谢绝商业性质转载*************/最近在一项任务中,团队老大要求我使用Ajax避免影响用户体验,于是我开始了Ajax的征程,虽说Ajax本身不难,但是我还是遇到了一些问题:当该页面

lina2006的专栏 650

[案例四] 智能填写属性工具(支持装配组件还有建模实体属性的批量创建、编辑)

本次案例主要是对上次导出自动导出BOM的一个前处理,要想导出属性,首先的有属性。于是本着学习的态度进行制作,可能有些功能有点别扭(支持装配环境下组件属性的批量填写,支持建模环境下的实体(不包括装配组件实体)——为了减负我把其过滤掉了,一般没人会往装配体里添加进行建模吧,但是不免有奇葩,哈哈哈)。

weixin_47753171的博客 1981

[原创]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因

[原创]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因小雨 发表于 2008-3-28 13:17:00/*************作者:小雨(QQ群群号17639373)声明:本文完全原创,非商业目的的转载请回复注明转载地址,谢绝商业性质转载*************/最近在一项任务中,团队老大要求我使用Ajax避免影响用户体验,

diligentcat的专栏 1110

Pulseaudio之同步/异步(十一)

PulseAudio是一个声音服务器,一个后台进程从一个或多个音源(进程或输入设备)接受声音输入 然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。 PulseAudio的主要特点包括: 可对每一个应用程序进行音量控制Per-application volume controls 可扩展的插件与支持可装载模块架构 兼容性许多流行的音频应用程序 支持多重音源和多重输出 低延时操作和支持延迟测量 一个对处理器资源效率零拷贝内存架构 能够发现本地网络上使用PulseAu

Android系统攻城狮 1002

在 Android Studio 中接入 DeepSeek:加速 Android 开发进程

通过在 Android Studio 中接入 DeepSeek,Android 开发者能够充分利用人工智能技术带来的强大优势,显著提升开发效率和代码质量。从前期的安装准备,到具体的接入步骤,再到使用过程中的技巧和注意事项,每一个环节都为打造高效、智能的开发环境提供了有力支持。希望本文能帮助你顺利将 DeepSeek 融入到 Android Studio 的开发工作流程中,让你在 Android 开发的道路上更加得心应手,创造出更优质的 Android 应用。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 4175

[转] 同一页面无法多次使用XmlHttp发起Ajax请求的真实原因

<br />/*************<br />作者:小雨(QQ群群号17639373)<br />声明:本文完全原创,非商业目的的转载请回复注明转载地址,谢绝商业性质转载<br />*************/<br />最近在一项任务中,团队老大要求我使用Ajax避免影响用户体验,于是我开始了Ajax的征程,虽说Ajax本身不难,但是我还是遇到了一些问题:当该页面第一次发出Ajax请求的时候可以正常运行,但是从第二次调用开始我惊奇的发现——onreadystatechange()事件再也没有被调用!

sendfeng的专栏 1218

245. 项目195:简易文字冒险游戏——《跟老吕学Python·新手》

如果您在学习本专栏教程时遇到任何问题,或有任何技术交流的意愿,欢迎在文章评论区留言,或通过优快云私信与老吕取得联系。老吕将及时回复您的留言,并与您共同探讨,以期为大家提供更为精准和有效的帮助。老吕珍视每一位读者的反馈和支持,期待与您共同学习、共同进步,共同创造美好的未来!我们的目标是不仅教会您Python语言,更是培养您解决问题的思维方式。请随意翻阅,按照自己的节奏学习,让这本专栏成为您编程旅程中的可靠伙伴。开发一个简易的文字冒险游戏,通过文本描述场景和事件,让玩家通过选择不同的选项来推动故事发展。

Python老吕的博客 713

【Ajax】--同一页面无法多次使用XmlHttp发起Ajax请求的真实原因

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34255055的博客 150

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

解决同一页面无法多次使用XmlHttp发起Ajax的问题

这两天遇到一个问题:当该页面第一次发出Ajax请求的时候可以正常运行,但是从第二次调用开始就完全没有了反应。当然在firefox和ie中效果是不一样的。在firefox中并没有此问题。起先还一直以为是ie坏掉了。之前有个错误的想法:就是XmlHttp只能使用一次send(),每次要使用新的XmlHttp。后来在js代码中添加了暴多alert硬是发现没有什么问题,每次servlet都过去了。后来发现

厌米's CUO Zone 1284

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Ajax 同一页面同时执行多个 XMLHTTP

Ajax 同一页面如何同时执行多个 XMLHTTP 呢,比如博客页,需要同时利用 Ajax 读取作者信息、文章信息、评论信息……我们的第一反应可能是创建多个全局 XMLHTTP 对象,但这并不现实。其实实现方式非常简单,就是给 onreadystatechange 对应的回调函数加上参数,以下代码是解决方案中一个函数中的一段代码。 xmlhttp.open("GET", "ajax_p

东杰书屋 2088

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

同一页面无法多次使用XmlHttp发起Ajax请求

当该页面第一次发出Ajax请求的时候可以正常运行,但是从第二次调用开始我惊奇的发现——onreadystatechange()事件再也没有被调用! 于是我上Google查了一下,发现还有不少人为此感到困扰,而且发现很多人持有的是这个错误的观点: 他们说这是因为一个XmlHttp只能使用一次send(),每次要使用新的XmlHttp。但是我的XmlHttp是函数内的局部变量,函数执行完毕它就会被

loman_yt的专栏 757

一个页面里面两个ajax,一个页面多个ajax请求

你是在一个页面多个子页面,然后每个子页面里面使用了一个回调函数吧?wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww由于include加载页面时先后难分,而且这样XMLHttpRequest对象就只剩一个了...

weixin_28811345的博客 1594

ajax请求的四个步骤

什么是ajax:异步javascript和XML。异步。无刷新读取数据。无需加载整个页面的情况下,刷新页面某一部分。 ajax的四个步骤。

一勺陈不满 8922

Ajax中的XMLHttp请求

 Ajax中的XMLHttp请求           当Microsoft开始在Internet Explorer 5.0中引入对XML基本的支持时,也引入了一个称为MSXML的ActiveX库,此库中的一个对象很快便成为广为人知的——XMLHttp。         XMLHttp对象最初是为了让开发者能在应用程序中的任何地方都能初始化HTTP请求而创造出来的,这些请求倾向于

谢启东的专栏 3845

python发起ajax请求_python--Ajax

我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,是因为requests抓取的都是原始的HTML文档,而浏览器中的页面则是经过JavaScript处理数据后生成的结果,这些数据都来源有多种可能是通过Ajax加载的,可能是包含在HTML文档中的,也可能是经过JavaScript和特定算法计算后生成的。对于第一种情况,数据加载是一种异步加载方式,原始的页面最初不会包含某些...

weixin_39883440的博客 884

Ajax发起对服务器的请求

一、服务器端逻辑:给文件追加内容&lt;?php $fp = fopen("./01.txt", "a"); //追加方式打开01.txt文件(文件不存在会自动创建) fwrite($fp, "ajax发起对服务器的请求"); //给文件写内容 fclose($fp); //关闭文件在浏览器中输入以下网址访问服务器端01.php文件,页面中没有内容,但是在当前01.php文件目录下会生成一个01...

杜小白的博客 478
上一篇: 几个Ext的学习站点
下一篇: js.公开Public、私有Private、特权的Privileged?
BlueSuperMan
博客等级 码龄24年 11粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值