标签:c class blog code java http
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!‘" ); } } |
标签:c class blog code java http
原文地址:http://www.cnblogs.com/jones-c/p/3754807.html