XHR工厂的实现

  ajax这种常见的开发模式已经遍布我们日常的开发之中了,ajax本质还是采用一种轮询的模式,就是隔一段时间去发送一次http请求,获取数据,然后显示在页面之上,当然,ajax比起新兴的WebScoket肯定是差了一截,WebScoket基于握手协议,是一种全双工的通信。

  目前,很多javascript库都实现了对ajax完善的支持,像jQuery, Ext, Mootools,
prototype等。平时是不是就简单的调用一下$.ajax()或者$.post()就轻松的实习了一次ajax请求了呢?如果你过于依赖jQuery等类库的话,你可能会忽略ajax的原生实现。下面我来谈谈ajax的原生实现。

  ajax中的核心对象是XMLHttpRequest。像Firefox、 chrome、 opera、 safari等浏览器可以直接通过new
XMLHttpRequest()创建,IE6及IE6以下不支持这种方式创建,但是可以通过new
ActiveXObject()创建。常见的HTTP状态码中,200表示请求已经发送成功,readyState一共有5种状态,0表示未连接,1表示打开连接,2表示发送请求,3表示交互,4表示完成交互并接手响应。了解了这些预备知识,我们就可以实现一个XHR工厂了。

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

var
AjaxHandler = new
Interface("AjaxHandler",["request", "createXObject"]);

var
XHRFactory = function() {};

XHRFactory.prototype = function() {

    request: function(method, url, callback, postvar) {

        var
xhr = this.createXObject();

        xhr.onreadystatechange = function(){

            if(xhr.readyState == 4) {

                (xhr.status == 200)?(callback.success(xhr.responseText,xhr.ResponseXML)):(callback.failuse(xhr.status));

                xhr.open(method, url, callback);

                if(method !== "POST") postvar = null;

                xhr.send(postvar);

            }

        }

    },

    createXObject: function(){

        var
methods = [function(){return
new XMLHttpRequest()},

                       function(){return
new ActiveXObject("Microsoft.XMLHTTP")},

                       function(){return
new ActiveXObject("Msxml2.XMLHTTP")}

                       ];

        for(var
i = 0, len = methods.length; i < len; i++) {

            try{

                methods[i];

            }

            catch(e){

                continue;

            }

            this.createXObject() = methods[i];

            return
methods[i];

        }

        throw
new Error("Your explore dosen‘t support Ajax!‘");

    }

}

  

XHR工厂的实现,布布扣,bubuko.com

时间: 2024-08-05 19:36:53

XHR工厂的实现的相关文章

java三种工厂模式

适用场合: 7.3 工厂模式的适用场合 创建新对象最简单的办法是使用new关键字和具体类.只有在某些场合下,创建和维护对象工厂所带来的额外复杂性才是物有所值.本节概括了这些场合. 7.3.1 动态实现 如果需要像前面自行车的例子一样,创建一些用不同方式实现同一接口的对象,那么可以使用一个工厂方法或简单工厂对象来简化选择实现的过程.这种选择可以是明确进行的也可以是隐含的.前者如自行车那个例子,顾客可以选择需要的自行车型号:而下一节所讲的XHR工厂那个例子则属于后者,该例中所返回的连接对象的类型取决

5分钟读书笔记之 - 设计模式 - 工厂模式

一个类或者对象中,往往会包含别的对象.在创建这种对象的时候,你可能习惯于使用常规方式,即用 new 关键字和类构造函数. 这会导致相关的俩个类之间产生依赖. 工厂模式,就是消除这俩个类之间的依赖性的一种模式,它使用一种方法来决定究竟实例化那个具体的类. 简单工厂模式 假设你想开几个自行车商店,每个商店都有几种型号的自行车出售,可以用这样一个类来表示: var BicycleShop = function(){} BicycleShop.prototype = { sellBicycle:func

前端学习总结(十四)javascript设计模式

一 什么是设计模式 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 二 设计原则 要学会设计模式,首先要了解设计模式所依托的设计原则: (1)单一职责原则(SRP原则):一个对象(方法)只做一件事情. 运用的设计模式:代理模式,单例模式,装饰者模式等. (2)最少知识原则(LKP原则):一个软件实体应当尽可能少地与其他实体发生相互作用.软件实体是一个广义的概念,不

JavaScript设计模式(3)

工厂模式 1. 简单工厂 简单工厂:使用一个类或对象封装实例化操作 var Speedster = function() {} Speedster.prototype = { assemble: function() {} } var ComfortCruiser = function() {} ComfortCruiser.prototype = { assemble: function() {} } // 简单工厂模式 var BicycleFactory = { createBicycle

angularJS中XHR与promise

angularJS应用是完全运行在客户端的应用,我们可以通过angularJS构建一个不需依赖于后端,同时能够实现动态内容和响应的web应用,angularJS提供了将应用与远程服务器的信息集成在一起的方法 $http服务 angularJS提供了内置的$http服务直接同外部进行通信,$http服务封装了浏览器原生的XMLHttpRequest对象 $http服务只接收一个参数对象,包含了用来生成http请求的配置内容,$http函数返回一个promise对象,具有success和error两

JS之工厂模式

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>工厂模式</title> 6 </head> 7 <body> 8 <script> 9 //让我们决定通过厂长告诉做什么事情,不需了解内部 10 /*模式作用: 11 1,对象的构建十分复杂,可以用此

JS常用的设计模式(2)——简单工厂模式

简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料机,要咖啡还是牛奶取决于你按哪个按钮. 简单工厂模式在创建ajax对象的时候也非常有用. 这个库里提供了几种ajax请求的方式,包括xhr对象的get, post, 也包括跨域用的jsonp和iframe. 为了方便使用, 这几种方式都抽象到了同一个接口里面. 1 var request1 = Re

抽象工厂模式

思考:工厂方法模式:http://www.cnblogs.com/maggiejyt/p/7561253.html 工厂方法模式UML: 问题:如果这家工厂不止要生产Ball(球),还要还有Sneakers(球鞋)等 则UML图为 当Product有多种类时则是抽象工厂模式 代码(Ball的代码见简单工厂模式:http://www.cnblogs.com/maggiejyt/p/7561253.html) Sneakers(球鞋抽象类) package com.maggie.FactoryMet

工厂ERP系统对企业高效管理的好处是什么?

对于工厂类企业来说,无论是小到厨具工厂,大到汽车工厂,再到航天设备工厂,其生产流程都是复杂,从开始的产品设计到零部件等所有物料的采购,再到生产组装,测试再调试,再到完成,需要经历几十上千步工序与细节,工厂的管理工作难度,那是相当大,但是,随着数据信息化系统的普及,工厂类企业实现智能高效化管理的愿望,得以实现,在这里,我们以工厂ERP系统为例,讲述一下工厂ERP系统对工厂类企业实现智能高效化管理的作用. 1.各环节工作,无缝流转 信息的沟通直观重要,对于企业来说,信息的沟通越是顺通,那么办公效率也