`
爱像天空
  • 浏览: 205832 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

XMLHTTP对象封装技术

    博客分类:
  • ajax
阅读更多
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,则会发生脚本错误。
  url:
   request请求要传递的目的地。该目的地应该是个servlet或jspservlet,因为request对象只能被servlet中的do***方法自动获取。
  options:
   结构应该与上面Ajax.Base定义的setOptions()中的option结构相同,如果为空或不写,则采用 Ajax.Base定义的初始值(没有传递任何参数时使用)。
   两者的区别在与Ajax.Updater返回给container的是完整的responseText,只有在responseText完全取得又没发生异常时才会把内容写到container里面,而PeriodicalUpdater在获取responseText时,不管是否已经完整取得,就把内容填进container,直到发生异常或完全取得responseText。大多数情况应该使用第一种方法,因为第一种方法在发生异常时会把异常信息显示在container里面,而第二种就不一定了。
   既然已经把xmlhttp封装好了,我们只需要设置好前面所说的3个参数就可以了,要注意的是,设置options参数,一定要按照base中的options结构进行设置,如果我们使用post方法,还可以在opitons中设置postBody属性,把要传递的queryString 放到body中,一个使用post方法进行传递的脚本例子如下:
  
  
  
   /*表单提交用post方法*/
   function doRequest(container,paraments,url){
   var options ={
   method: 'post',
   asynchronous: true,
   postBody: paraments
   };
   new Ajax.Updater(container,url,options);
   }
  
  最后不得不说的是中文编码问题,prototype对传递的参数都进行了编码转换工作,每个传递值通过encodeURIComponent 进行了处理.编码会被转换成utf-8,在后台获取request时,应该统一使用request.setCharacterEncoding("UTF-8")对request设置编码,而不必管页面的编码格式是什么.如果使用post方法进行传递数据,则会自动执行:
   request.setHeader('Content-type','application/x-www-form-urlencoded').确保传递数据编码格式的正确.
分享到:
评论
1 楼 zht110227 2009-04-25  
very good,可惜对于框架的一些东西不是很懂。

相关推荐

    vb6源码:好用Xmlhttp封装.rar

    在VB6中,XMLHTTP通常通过Microsoft XML (MSXML) 库中的XMLHTTP对象来使用。 2. **Web**:这里指的是Web服务,也就是通过HTTP或HTTPS协议与服务器交互,获取网页内容。 3. **源码**:指的是VB6的源代码文件,这些...

    在VC中使用XMLHTTP

    本文将详细介绍如何在VC++ 6.0环境中正确初始化并使用XMLHTTP对象,同时也会针对提供的代码示例进行分析与优化建议。 #### 二、XMLHTTP简介 XMLHTTP是Microsoft为Web服务提供的一个COM组件,它提供了一个简单的...

    xmlhttp调用WebService

    标签"ajax"提示我们,这种技术广泛应用于Ajax应用中,通过XMLHTTP对象实现前后端数据的异步交换,提高了用户体验。需要注意的是,非IE浏览器可能不支持ActiveXObject,因此在现代Web开发中,通常会使用更通用的`...

    易语言测试XMLHTTP版本

    1. **创建XMLHTTP对象**:首先,在易语言中声明一个XMLHTTP对象,这是进行网络通信的基础。 2. **设置请求属性**:我们需要设置HTTP请求的相关属性,比如请求方法(GET或POST)、URL、请求头等。 3. **发送请求**...

    vb6用的xmlhttp模块,get和post方式提交数据,异步获取,不卡死,十分好用

    3. `OnReadyStateChange`事件:当XMLHTTP对象的ReadyState属性发生变化时触发,通常在这里检查状态是否完成(ReadyState = 4),以及请求是否成功(Status = 200)。 4. `ResponseText`属性:获取服务器返回的文本...

    XMLHTTP类模块.rar

    3. **状态码和响应文本**:XMLHTTP对象有status属性,用于获取HTTP响应的状态码,例如200表示成功,404表示未找到,500表示服务器内部错误。同时,responseText属性则包含了服务器返回的文本数据。 4. **头部信息**...

    asp+xmlhttp+javascript+xml

    【标题】"asp+xmlhttp+javascript+xml" 涉及的核心技术是AJAX(异步JavaScript和...客户端JavaScript通过XMLHTTP对象发起请求,服务端ASP处理请求并返回XML数据,整个过程无缝衔接,提升了网页应用的性能和用户体验。

    XMLHTTP类模块源码

    - 创建实例:通过类模块的构造函数创建XMLHTTP对象的实例。 - 设置请求参数:比如URL、HTTP方法、请求头和数据。 - 发起请求:调用对象的发送方法,启动HTTP请求。 - 监听响应:注册事件处理器,处理接收到的...

    javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象

    在JavaScript中,XMLHttpRequest(简称XHR)对象是用于在后台与服务器进行异步数据交换的核心组件,常用于实现Ajax(Asynchronous JavaScript and XML)技术。然而,频繁地创建和销毁XMLHttpRequest对象会带来性能...

    易语言源码XMLHTTP方式访问网页.rar

    1. **创建XMLHTTP对象**:在易语言中,需要先创建一个XMLHTTP对象实例,通常通过调用动态链接库(DLL)中的相关函数完成。 2. **打开连接**:使用`Open`方法设定请求类型(GET、POST等)、URL、是否异步执行以及...

    Asp.net XMLHTTP封装类(GET,Post发送和接收数据)

    在实际使用封装类时,开发者需要创建XMLHTTP对象实例,设定参数结构体,并调用SendCommand方法来发送请求,最后接收返回的数据。 此外,该代码中还定义了IDisposable接口,表明XMLHTTP类的实例可以在不再使用时正确...

    XML实用大全 XMLHttp

    当服务器响应时,XMLHttp对象会触发一系列的事件,如onreadystatechange,我们可以在此事件中检查readyState和status属性来确定请求的状态和是否成功。 在“XML实用大全-chm”和“xmlhttp.CHM”这两个CHM文件中,很...

    ajax代码及简单封装

    本篇文章通过对给定的AJAX代码及其封装方法的解析,深入探讨了AJAX技术的基本原理和实现方式。了解这些核心概念和技术细节有助于开发者更好地掌握AJAX,并将其应用于实际项目中。在.NET平台下,利用AJAX可以极大地...

    易语言XMLHTTP方式访问网页

    3. **XmlHttp**:这是一个关键的模块或类,封装了XMLHTTP对象的操作。它包含设置URL、请求方法(GET或POST)、发送数据、处理响应等功能。易语言的用户可以通过调用这个模块的函数或方法来实现网络请求。 在实际...

    对xmlHttp对象方法和属性的理解

    首先,XMLHttpRequest对象提供了对HTTP协议的封装,客户端通过这个对象可以发送请求到服务器,并且能够处理服务器返回的数据。它是基于HTTP协议的,可以完成GET和POST等HTTP方法的请求。XMLHttpRequest还支持同步和...

    js实现对ajax请求面向对象的封装

    1、创建XMLHttp对象 2、发送请求:包括打开链接、发送请求 3、处理响应 在不使用任何的js框架的情况下,要想使用ajax,可能需要向下面一样进行代码的编写 <span xss=removed>var xmlHttp = xmlHt

    javascript对XMLHttpRequest异步请求的面向对象封装

    在给定的代码中,我们看到了一个面向对象的封装,它创建了一个名为`CallBackObject`的类,用于简化异步请求的过程。这个封装允许开发者更加方便地处理AJAX(Asynchronous JavaScript and XML,尽管现在通常处理JSON...

    创建XMLHttpRequest对象

    基于以上分析,我们可以将上述方法封装成一个函数,以便在不同的浏览器环境下创建`XMLHttpRequest`对象: ```javascript function createXmlHttpRequest() { var xmlHttp; try { // 尝试使用原生方式创建 ...

    简单封装Ajax

    【简单封装Ajax】这篇文章主要探讨的是如何在JavaScript中对原生的XMLHttpRequest对象进行简单的封装,以便于在实际开发中更方便地进行异步数据请求。在Web开发中,Ajax(Asynchronous JavaScript and XML)是一种...

Global site tag (gtag.js) - Google Analytics