21.XMLHttpRequest对象详解
XMLHttpRequest包含了一些基本的属性和方法,XMLHttpRequest正是通过这些属性和方法与服务器通信的。Ajax则依赖于XMLHttpRequest来完成与服务器的通信。
XMLHttpRequest的方法:
abort():停止发送当前请求
getAllResponseHeaders():获取服务器返回的全部响应头
getResponseHeader():根据响应头的名字,获取对应的响应头
open("method","URL","asyncFlag"):建立与服务器URL的连接,并设置请求的方法,以及是否使用异步请求
XMLHttpRequest的属性:
onreadystatechange:该属性用于指定XMLHttpRequest对象状态改变时的事件处理函数
readyState:XMLHttpRequest对象的处理状态
responseText:获取服务器的相应文本
responseXML:获取服务器的XML文档对象
status:该属性是服务器的返回的状态码,只有当服务器的相应已经完成时,才会有该状态码
statusText:是服务器返回的状态文本信息,只有当服务器的相应已经完成时,才会有该状态文本信息
XMLHttpRequest对象的几种状态:
0:XMLHttpRequest对象还没有完成初始化
1:XMLHttpRequest对象开始发送请求
2:XMLHttpRequest对象的请求发送完成
3:XMLHttpRequest对象开始读取服务器的响应
4:XMLHttpRequest对象读取服务器响应结束
服务器常用的状态码及其对应的含义:
200:服务器相应正常
400:无法找到请求的资源
404:需要访问的资源不存在
500:服务器内部错误
//判断处理服务器响应的时机是否成熟,响应完成且响应正常
if(xmlrequest.readyState == 4){
if(xmlrequest.status == 200){
//信息已经成功返回,开始处理信息
}else{
//页面不正常信息
}
}
22.Ajax必须解决的问题
跨浏览器问题
安全性问题:通常建议JavaScript只能读取和修改同源文档的属性,这种策略称为同源策略(Same Origin Policy,简称SOP)
性能问题:
for(;;),while(),for(in):for(in)效率最差,因为它需要查询Hash键
如果需要遍历数组,应该先缓存数组长度
尽量少用eval
尽量使用+=、-=、*=、\=
当需要将数字转换成字符时,采用如下方式:""+1
当需要将浮点数转换成整形时,应该使用Math.floor()或者Math.round(),而不是使用parseInt
尽量使用JSON格式来创建对象
当使用数组时,也尽量使用JSON格式的语法
对字符串进行循环操作,例如替换、查找,应使用正则表达式
最后一个基本的原则,对于大的JavaScript对象,因为创建时时间和空间的开销都比较大,因此应该尽量考虑采用缓存,考虑使用池的技术管理。
xmlrequestPool.js
//使用literal语法定义一个对象XMLHttp
var XMLHttp =
{
//定义第一个属性,该属性用于缓存XMLHttpRequest对象的数组
XMLHttpRequestPool:[],
//对象的第一个方法,该方法用于返回一个XMLHttpRequest对象
getInstance:function()
{
//从XMLHttpRequest的对象池中取出一个闲置的对象
for(var i = 0; i < this.XMLHttpRequestPool.length; i++)
{
//readyState为0或者为4,都表示当前的XMLHttpRequest对象为闲置的对象
if(this.XMLHttpRequestPool[i].readyState==0||this.XMLHttpRequestPool[i].readyState==4)
{
return this.XMLHttpRequestPool[i];
}
}
//如果没有空闲的,将再次创建一个新的XMLHttpRequest对象
this.XMLHttpRequestPool[this.XMLHttpRequestPool.length] = this.createXMLHttpRequest();
//返回刚刚创建的XMLHttpRequest对象
return this.XMLHttpRequestPool[this.XMLHttpRequestPool.length-1];
},
//创建新的XMLHttpRequest对象
createXMLHttpRequest:function()
{
//DOM2浏览器
var objXMLHttp = new XMLHttpRequest();
//IE浏览器
var objXMLHttp = new ActiveXObject('xxx');
return objXMLHttp;
},
//定义对象的第三个方法:发送请求(发送[POST,GET],地址,数据,回调函数)
sendRequest:function(method,url,data,callback)
{
var objXMLHttp = this.getInstance();
with(objXMLHttp)
{
try{
//增加一个额外的random请求参数,用于防止IE缓存服务器相应
if(url.indexOf("?")>0)
{
url += "&random=" + Math.random();
}else
{
url += "?random=" + Math.random();
}
//打开与服务器的连接
open(method,url,true);
//对于使用POST请求方式
if(method == "POST")
{
//设定请求头
setRequestHeader('Content-Type','application/x-www-form-urlencoded');
send(data);
}
//对于采用GET请求
if(method == "GET")
{
send(null);
}
//设置状态改变的回调函数
onreadystatechange = function()
{
//当服务器的响应完成时,以及获得了正常的服务器响应
if(objXMLHttp.readyState == 4 && objXMLHttp.status == 200)
{
callback(objXMLHttp);
}
}
}catch(e){alert(e);}
}
}
};
分享到:
相关推荐
9. **JS_chp1课堂案例**:这部分内容可能包含了一些课堂上的实际示例,帮助学生理解和应用第一章学到的JS基础概念。 通过这些课件,初学者可以系统地学习和掌握JavaScript的基本语法,并通过实例加深理解,为进一步...
在本系列的第五部分,我们将深入探讨如何使用D3.js创建一个基本的柱状图。这个教程将帮助你理解D3.js的基本用法,以及如何通过它来呈现数据。 首先,我们需要理解柱状图的基本构成。在柱状图中,每个柱子代表一种...
"JS基本入门材料"这个压缩包文件显然是为初学者设计的一份学习资源,旨在帮助他们理解并掌握JavaScript的基础知识。 首先,我们需要了解JavaScript的基本概念。JavaScript是一种解释型的、基于原型的、弱类型的脚本...
3. **多种比较模式**:除了基本的字符差异,jsdiff还支持行级比较、块级比较,以及针对整段文本的比较。 4. **API接口丰富**:jsdiff提供了丰富的API,包括`diffChars`、`diffWords`、`diffLines`、`diffSections`...
JavaScript最初的设计融合了C语言的基本语法、JAVA的数据类型和内存管理、Scheme的函数特性以及Self的原型继承机制,形成了独特的编程风格,结合了函数式编程和面向对象编程的特点。 随着JavaScript的普及,出现了...
在本教程中,我们将深入探讨HandleBar.js的基本概念、语法以及如何在实际项目中应用。 1. **基本概念** HandleBar.js的核心理念是分离视图(View)和数据(Data),使得开发者能够独立地修改两部分而互不影响。它...
FLV.js和FLV.min.js是JavaScript库,用于在Web浏览器中播放FLV(Flash Video)格式的视频内容。这些文件是开源项目,通常用于那些希望在HTML5环境下支持旧版FLV视频内容的网站。FLV是一种广泛应用于早期互联网视频的...
JavaScript是一种广泛应用于Web开发的弱类型、动态...如今,JavaScript已经成为了Web开发不可或缺的一部分,随着技术的发展,它还延伸到了服务器端(Node.js)、移动应用开发等领域,展现了其强大的生命力和灵活性。
首先,我们需要理解JavaScript的基本概念。JavaScript是一种广泛应用于Web开发的脚本语言,它可以直接在浏览器中运行,用于控制页面的行为,比如响应用户的交互,处理数据,以及像我们现在关注的——捕获和处理页面...
通过《JavaScript凌厉开发(Ext_JS_3详解与实践)》,读者不仅可以掌握Ext JS 3的基本用法,还能学习到实际项目中的最佳实践,提升JavaScript开发水平。这本书的实例丰富、易于理解,对于任何希望提升JavaScript技能,...
3. Array数组:在JavaScript中,数组是一种特殊的对象,可以存储多个值。我们可以通过索引来访问数组中的元素,索引从0开始。数组支持多种内置方法,如`push()`用于在数组末尾添加元素,`pop()`移除末尾元素,`shift...
以上是JavaScript基础知识点的部分概述,理解并掌握这些概念是成为合格的JS开发者的基础。通过持续学习和实践,可以深入探索更高级的主题,如AJAX、前端框架(如React、Vue)、Node.js后端开发等。
以上列出的类库只是JavaScript众多资源的一小部分,它们各自解决特定的问题或提供特定的功能。在实际项目中,开发者通常会根据需求选择合适的库或框架进行集成,以提升开发效率和代码质量。对于压缩包中的文件,如...
《SpreadJS:实现单次打印部分工作表的深入解析》 SpreadJS 是一款强大的JavaScript电子表格库,由 GrapeCity 公司开发,它提供了一系列功能,使得在Web应用中创建、编辑和展示复杂的电子表格数据变得轻而易举。本...
在现代Web开发中,视频流已经成为一个不可或缺的部分,特别是在实时通信、在线教育和媒体分享等领域。M3U8是一种基于HTTP的流媒体协议,广泛用于传输HLS(HTTP Live Streaming)内容,尤其适合适应不同网络条件下的...
**jsTree基本例子** jsTree是一款强大的JavaScript库,专门用于创建、操作和展示具有层级结构的数据,例如构建可交互的目录树或文件系统浏览器。它提供了丰富的API和各种主题,可以方便地集成到任何Web应用中,提供...
3. **Babel**: Babel是一个JavaScript编译器,用于将ES6+的新特性转换为当前浏览器可识别的JavaScript语法。因为React推荐使用JSX(一种融合JavaScript和HTML的语法),而JSX并不是所有浏览器都支持的,所以需要...
3. **逻辑**:JavaScript部分,实现日历的动态行为,如显示/隐藏日历,切换月份,选择日期等。 在描述中提到,示例代码可能支持两种编码格式:UTF-8和GBK。UTF-8是一种国际通用的字符编码标准,能表示世界上几乎...
在JavaScript中,获取域名部分是常见的任务,尤其是在处理URL相关的操作时。这涉及到对URL对象的理解和使用。本文将深入探讨如何使用JavaScript来提取URL的域名部分,并提供一个实际的示例来帮助理解。 首先,我们...
《three.js开发指南-代码部分》是一份针对three.js库的实用代码集合,旨在帮助开发者理解和实践这个强大的3DWeb图形库。three.js是JavaScript的一个框架,它为WebGL提供了一个高级接口,允许在浏览器中创建复杂的3D...