• λ我爱Aspx >> C#.Net >> XMLHTTP对象封装技术_Ajax
  • XMLHTTP对象封装技术_Ajax

  • :aspxer  Դ:internet  :2007-4-28 23:46:58  ؼ:ajax,xml
  • Ajax技术的实现主要依赖于xmlhttprequest,但我们在调用其来进行异步数据的传输时,由于xmlhttp是个短线过程(处理事件完成后就销毁)如果不对该对象进行包装处理的话,就不得不在需要调用的地方重新构建xmlhttprequest,每次调用都要写一大段的代码,实在不是个好办法。好在现在很多开源的ajax框架都提供了对xmlhttp封装的方案。这里以ajaxtags自带的prototype-1.4.0.js为母版,来看看如何将xmlhttp对象封装成一个可复用的方法。

    在prototype.js中,首先定义了一个变量:Ajax

    var Ajax = {

    getTransport: function() {

    return Try.these(

    function() {return new ActiveXObject('Msxml2.XMLHTTP')},

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

    function() {return new XMLHttpRequest()}

    ) || false;

    },

    activeRequestCount: 0

    }

    变量返回了一个xmlhttprequest,可以看到,如果我们调用了Ajax.getTransport(),每次都会返回一个新的xmlhttprequest对象。

    在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),但两者都是相互独立的,如何把他们进行整合呢?

    在 prototype中给我们提供了两个方案,一个是Ajax.Updater,另一个是Ajax.PeriodicalUpdater,两个共同点都是必须传入3个参数:

    container:

    response数据要传达的位置,该位置通过html标签的id进行定义,比如你要把返回的数据输出到html中的某个<div>中,则只要把container改成该id的值就可以了。如果找不到该container,则会发生脚本错误。

    Ҷƪл˵?
  • һƪAjax核心:XMLHTTP组件相关技术资料_Ajax
    һƪ优化MICROSOFT ACCESS提高速度_ASP技巧