`
AllenHU0320
  • 浏览: 85776 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JS基本部分3

 
阅读更多

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);}

             }

      }

};

分享到:
评论

相关推荐

    JS的基本语法

    9. **JS_chp1课堂案例**:这部分内容可能包含了一些课堂上的实际示例,帮助学生理解和应用第一章学到的JS基础概念。 通过这些课件,初学者可以系统地学习和掌握JavaScript的基本语法,并通过实例加深理解,为进一步...

    D3.JS 基于javascript的图表展示库<五>-基本柱状图1

    在本系列的第五部分,我们将深入探讨如何使用D3.js创建一个基本的柱状图。这个教程将帮助你理解D3.js的基本用法,以及如何通过它来呈现数据。 首先,我们需要理解柱状图的基本构成。在柱状图中,每个柱子代表一种...

    JS基本入门材料

    "JS基本入门材料"这个压缩包文件显然是为初学者设计的一份学习资源,旨在帮助他们理解并掌握JavaScript的基础知识。 首先,我们需要了解JavaScript的基本概念。JavaScript是一种解释型的、基于原型的、弱类型的脚本...

    jsdiff一个javascript的文本差异比较实现

    3. **多种比较模式**:除了基本的字符差异,jsdiff还支持行级比较、块级比较,以及针对整段文本的比较。 4. **API接口丰富**:jsdiff提供了丰富的API,包括`diffChars`、`diffWords`、`diffLines`、`diffSections`...

    JavaScript_1_JS基本语法.docx

    JavaScript最初的设计融合了C语言的基本语法、JAVA的数据类型和内存管理、Scheme的函数特性以及Self的原型继承机制,形成了独特的编程风格,结合了函数式编程和面向对象编程的特点。 随着JavaScript的普及,出现了...

    HandleBar.js基本使用

    在本教程中,我们将深入探讨HandleBar.js的基本概念、语法以及如何在实际项目中应用。 1. **基本概念** HandleBar.js的核心理念是分离视图(View)和数据(Data),使得开发者能够独立地修改两部分而互不影响。它...

    flv.js和flv.min.js和基本使用demo(附带js文件)

    FLV.js和FLV.min.js是JavaScript库,用于在Web浏览器中播放FLV(Flash Video)格式的视频内容。这些文件是开源项目,通常用于那些希望在HTML5环境下支持旧版FLV视频内容的网站。FLV是一种广泛应用于早期互联网视频的...

    JavaScript_1_JS基本语法.pdf

    JavaScript是一种广泛应用于Web开发的弱类型、动态...如今,JavaScript已经成为了Web开发不可或缺的一部分,随着技术的发展,它还延伸到了服务器端(Node.js)、移动应用开发等领域,展现了其强大的生命力和灵活性。

    js实现网页特定部分截屏或打印.zip

    首先,我们需要理解JavaScript的基本概念。JavaScript是一种广泛应用于Web开发的脚本语言,它可以直接在浏览器中运行,用于控制页面的行为,比如响应用户的交互,处理数据,以及像我们现在关注的——捕获和处理页面...

    JavaScript凌厉开发(Ext_JS_3详解与实践

    通过《JavaScript凌厉开发(Ext_JS_3详解与实践)》,读者不仅可以掌握Ext JS 3的基本用法,还能学习到实际项目中的最佳实践,提升JavaScript开发水平。这本书的实例丰富、易于理解,对于任何希望提升JavaScript技能,...

    js 基本概念

    3. Array数组:在JavaScript中,数组是一种特殊的对象,可以存储多个值。我们可以通过索引来访问数组中的元素,索引从0开始。数组支持多种内置方法,如`push()`用于在数组末尾添加元素,`pop()`移除末尾元素,`shift...

    js基础知识点思维导图

    以上是JavaScript基础知识点的部分概述,理解并掌握这些概念是成为合格的JS开发者的基础。通过持续学习和实践,可以深入探索更高级的主题,如AJAX、前端框架(如React、Vue)、Node.js后端开发等。

    javascript 的基本上所有的常用类库

    以上列出的类库只是JavaScript众多资源的一小部分,它们各自解决特定的问题或提供特定的功能。在实际项目中,开发者通常会根据需求选择合适的库或框架进行集成,以提升开发效率和代码质量。对于压缩包中的文件,如...

    spreadjs_单次打印部分工作表-demo.zip

    《SpreadJS:实现单次打印部分工作表的深入解析》 SpreadJS 是一款强大的JavaScript电子表格库,由 GrapeCity 公司开发,它提供了一系列功能,使得在Web应用中创建、编辑和展示复杂的电子表格数据变得轻而易举。本...

    videoJs+ hlive JS实现m3u8格式播放

    在现代Web开发中,视频流已经成为一个不可或缺的部分,特别是在实时通信、在线教育和媒体分享等领域。M3U8是一种基于HTTP的流媒体协议,广泛用于传输HLS(HTTP Live Streaming)内容,尤其适合适应不同网络条件下的...

    jsTree基本例子

    **jsTree基本例子** jsTree是一款强大的JavaScript库,专门用于创建、操作和展示具有层级结构的数据,例如构建可交互的目录树或文件系统浏览器。它提供了丰富的API和各种主题,可以方便地集成到任何Web应用中,提供...

    react js基本文件.rar

    3. **Babel**: Babel是一个JavaScript编译器,用于将ES6+的新特性转换为当前浏览器可识别的JavaScript语法。因为React推荐使用JSX(一种融合JavaScript和HTML的语法),而JSX并不是所有浏览器都支持的,所以需要...

    js 日历 js日历 例子 javascript日历

    3. **逻辑**:JavaScript部分,实现日历的动态行为,如显示/隐藏日历,切换月份,选择日期等。 在描述中提到,示例代码可能支持两种编码格式:UTF-8和GBK。UTF-8是一种国际通用的字符编码标准,能表示世界上几乎...

    JS 获取域名部分

    在JavaScript中,获取域名部分是常见的任务,尤其是在处理URL相关的操作时。这涉及到对URL对象的理解和使用。本文将深入探讨如何使用JavaScript来提取URL的域名部分,并提供一个实际的示例来帮助理解。 首先,我们...

    three.js开发指南-代码部分

    《three.js开发指南-代码部分》是一份针对three.js库的实用代码集合,旨在帮助开发者理解和实践这个强大的3DWeb图形库。three.js是JavaScript的一个框架,它为WebGL提供了一个高级接口,允许在浏览器中创建复杂的3D...

Global site tag (gtag.js) - Google Analytics