21. javacript高级程序设计-Ajax与Comet
1. Ajax与Comet
1.1 XMLHttpRequest对象
IE5是第一款引入XHR对象的浏览器,IE5中是通过MSXML库中的一个ActiveX对象实现的。因此在IE中可能存在MSXML2.XMLHttp, MSXML2.XMLHttp.3.0, MSXML2.XMLHttp.6.0,要支持旧浏览器,可以使用如下函数:
function createXHR(){
if(typeof XMLHttpRequest != 'undefined'){
return new XMLHttpRequest();
}else if(typeof ActiveXObject != 'undefined'){
if(typeof arguments.callee.activeXString !="string"){
var versions = ['MSXML2.XMLHttp.6.0','MSXML2.XMLHttp.3.0','MSXML2.XMLHttp'],i,len;
for(i =0 ,len=versions.length;i<len;i++){
try{
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
}cath(ex){
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}else{
throw new Error('NO XHR object.');
}
}
1.2 XHR用法
使用XHR对象,第一个方法是open(),第一个参数表示方法,第二个参数表示请求地址,第三个参数表示是否异步传递数据。
第二步调用send()方法,
第三部根据 返回状态判断执行对应方法
(1). 等到服务器响应后,响应数据会自动填充XHR对象的属性。
l responseText:作为响应主体返回的数据
l responseXML:响应内容是XML DOM文档数据,内容类型是“text/xml”或者“application/xml”
l status:响应的状态
l statusText:响应的状态说明
(2). 针对异步请求,可以检测XHR对象的readyState属性,
l 0:未初始化
l 1:启动
l 2:发送
l 3:接收
l 4:完成
var xhr = createXHR();
xhr.onreadystatechange = function(){ //必须在open方法前指定
if(xhr.readystate == 4){
if((xhr.status >=200 && xhr.status < 300)|| xhr.status == 304){
alert(xhr.responseText);
}else{
alert(‘error’);
}
}
}
xhr.open(‘get’,’ex.php’,true);
xhr.send(null);
1.3 GET请求
var xhr = createXHR();
xhr.onreadystatechange = function(){ //必须在open方法前指定
if(xhr.readystate == 4){
if((xhr.status >=200 && xhr.status < 300)|| xhr.status == 304){
alert(xhr.responseText);
}else{
alert(‘error’);
}
}
}
xhr.open(‘get’,’ex.php?uid=xx’,true); //URL地之后传递参数
xhr.send(null);
1.4 POST请求
var xhr = createXHR();
xhr.onreadystatechange = function() { //必须在open方法前指定
if (xhr.readystate == 4) {
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
alert(xhr.responseText);
} else {
alert(‘error’);
}
}
}
xhr.open(‘post’, ’ex.php’, true);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //发送前指定传输类型
xhr.send(form.data);//参数在send是传输
1.5 跨资源请求
IE8通过XDomainRequest对象支持CORS,其他浏览器通过XHR对象原生支持CORS,图像Ping和JSONP是另外两种跨浏览器通信技术。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构