ajax(动态网站静态化)技术的实现主要依赖于xml(标准化越来越近了)httprequest,但我们在调用其来进行异步数据的传输时,由于xml(标准化越来越近了)http是个短线过程(处理事件完成后就销毁)如果不对该对象进行包装处理的话,就不得不在需要调用的地方重新构建xml(标准化越来越近了)httprequest,每次调用都要写一大段的代码,
实在不是个好办法。好在现在很多开源的ajax(动态网站静态化)框架都提供了对xml(标准化越来越近了)http封装的方案。这里以ajax(动态网站静态化)tags自带的prototype-1.4.0.js为母版,来看看如何将xml(标准化越来越近了)http对象封装成一个可复用的方法。 在prototype.js中,首先定义了一个变量:ajax(动态网站静态化)
var ajax(动态网站静态化) = {
getTransport: function() {
return Try.these(
function() {return new ActiveXObject('Msxml(标准化越来越近了)2.xml(标准化越来越近了)HTTP')},
function() {return new ActiveXObject('Microsoft.xml(标准化越来越近了)HTTP')},
function() {return new xml(标准化越来越近了)HttpRequest()}
) || false;
},
activeRequestCount: 0
}
变量返回了一个xml(标准化越来越近了)httprequest,可以看到,如果我们调用了ajax(动态网站静态化).getTransport(),每次都会返回一个新的xml(标准化越来越近了)httprequest对象。
在ajax(动态网站静态化)变量中定义了一个基础方法ajax(动态网站静态化).Base和该基础方法的原型(初始时,每个脚本方法默认都有个空的原型,该原型会继承Object的原型,如果我们在Object中改变了原型,则所有的脚本方法都会被改变。) 该基础方法被ajax(动态网站静态化).Request所继承,注意的是,如果在ajax(动态网站静态化).Request中填充了继承的原型的同名方法或变量,则会实现重载。
ajax(动态网站静态化).Base原型中最主要的是setOptions方法,过会我们就会用到。
setOptions: function(options) {
this.options = {
method: 'post',
asynchronous: true,
parameters: ''
}
prototype中对request是通过定义ajax(动态网站静态化).Request原型(ajax(动态网站静态化).Request.prototype)来实现的。但我们并不能直接对ajax(动态网站静态化).Request进行调用,主要原因是ajax(动态网站静态化).Request并没有提供一个统一处理的过程。而且我们可能需要通过request 再取得response。(试想一下,客户那边发出一条信息,都始终没与收到回复,那是会让人觉得很恼火的事~),prototype同样为我们封装好了resoponse(ajax(动态网站静态化).Responders),但两者都是相互独立的,如何把他们进行整合呢?