惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
H
Heimdal Security Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
C
Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Hacker News
The Hacker News
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
S
Securelist
P
Privacy International News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
博客园 - 叶小钗
J
Java Code Geeks
V
V2EX
博客园 - Franky
Spread Privacy
Spread Privacy
K
Kaspersky official blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Simon Willison's Weblog
Simon Willison's Weblog
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
C
Cybersecurity and Infrastructure Security Agency CISA
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
NISL@THU
NISL@THU
罗磊的独立博客
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
V
Visual Studio Blog

博客园 - 良村

元数据驱动开发 - 面向对象编程思想的补充 用ANTLR实现表达式词法和语法分析器 我的开源项目分享-基于SharpBrowser二次开发的定制浏览器,过程中填坑无数 AI是什么 现阶段AI编程无法取代程序员 用zrender实现工作流图形化设计(附范例代码) 特殊字符
导致的Javascript脚本异常 不同寻常的浏览器请求无响应错误 进销存管理中对红冲处理的误区 进销存管理中负库存产生的原因以及对应措施 打造自己的Html文本编辑控件 探讨对Web控件的异常处理 看了一篇不错的文章 - 使用 UTF-8 对 XML 文档进行编码 Ajax学习笔记(2) - 一定要用XML吗? ASP.NET控件编写日记-当心“用过的控件”! ASP.NET控件编写心得总结- 以后会写详细一点 CodeDom.CodeArrayCreateExpression不能生成多维数组的创建表达式 用NAnt编译带有资源文件(*.resx,*.bmp,*.gif等)的C#项目 网址收藏 C#实现Singleton的两种方法的比较 发现Maxthon(myIE2)浏览器处理javascript脚本时的奇怪现象 - 良村 - 博客园 页面缓冲与Asp.Net的性能优化(设置Page.Buffer属性) 如何使用AdminScripts脚本创建虚拟目录 采用HttpModules来重写URLs(实践篇)
Ajax 学习笔记(1)
良村 · 2005-08-21 · via 博客园 - 良村

技术的核心是采用XmlHttp来请求和接收回应。XmlHttp只是一种技术规范,具体的实现上IE和Firefox有所不同,IE是用ActiveX方式,而Firefox是内置实现的。

IE下创建XmlHttp对象:
A=new ActiveXObject('Msxml2.XMLHTTP');

Firefox下创建XmlHttp对象:
A=new XMLHttpRequest();

还可以用下面的写法,可以比较好的兼容IE和Firefox:
function createXH(){
var A=null;
try { A=new ActiveXObject('Msxml2.XMLHTTP') } catch(e) {
 try{A=new ActiveXObject('Microsoft.XMLHTTP') } catch(oc) { A=null }
}
if ( !A && typeof XMLHttpRequest != 'undefined' ) { A=new XMLHttpRequest() }
return A
}

创建好XmlHttp之后,接下来就是发送请求和接收回应:
var xmlhttp=createXH();
xmlhttp.open('POST', 'Message/CheckNew.aspx', false);
false - 表示发送消息之后一直等待回应(即同步执行的方式);
true - 表示发送消息之后不等待回应,继续执行下一步(即异步执行的方式);

下面是同步执行的代码写法:
xmlhttp.open('POST', 'Message/CheckNew.aspx', false);
xmlhttp.send(''); // 这里也可以在请求时发送一些数据,如果没有数据,也要发个空数据
var rt=xmlhttp.responseText;
// rt 就是接受回应的数据,接下来就是客户端对rt进行分析处理

同步执行的写法一般情况最好不要用,因为如果请求的服务器端半天不回应或者网络不太稳定的情况下,浏览器会一直等待回应,而且在等待期间浏览器几乎死掉,CPU占用接近100%!
用异步执行的方式就可以避免这个问题,如下:
var xmlhttp = createXH();
function checkNewMessages(){
 xmlhttp.open('POST', 'Message/CheckNew.aspx', true);
 xmlhttp.onreadystatechange=continue;
 xmlhttp.send('');
}
function continue(){
 if(xmlhttp.readyState==4){
 var rt = xmlhttp.responseText;
}
}

xmlHttp.responseText返回的字符串,如何处理这些字符串?一些Ajax框架对这个处理过程进行了封装,增加很多种数据类型,甚至还可以处理DataSet。如果不想用这些框架,也可以使用简单类型,如请求时将请求数据格式化为Xml方式(便于服务器端的Aspx处理),而返回结果则写成javascript的数组表达式形式(方便客户端进行处理)。

如:
发送时
var xml='<message><receiver>kathy</receiver><content>message context!</content></message>';
...
xmlhttp.send(xml);
接收时服务器端返回的字符串为:
['rrooyy','2005-05-01 08:22:12','See you!']
var rt=xmlhttp.responseText;
var msg=eval(rt);
然后就可以按照数组方式对数据进行处理了;