电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 网络编程 -> Ajax教程
xmlhttp对象封装技术_ajax教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 

    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).确保传递数据编码格式的正确.

http://blog.csdn.net/lemonfamily/archive/2007/01/30/1498248.aspx


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·asp.net ajax beta2 调用本地webservice的一些改变_ajax教程
·读写ini文件的四个函数_visualbasic教程
·利用ajax传递xml文档_ajax教程
·利用php+javascript打造ajax搜索窗_ajax教程
·ajax无刷新实现图片切换特效_ajax教程
·结合ajax进行php开发之入门_ajax教程
·ajax技术制作得在线歌词搜索功能 _ajax教程
·迁移你的web页面到asp.net ajax 1.0 _ajax教程
·初步了解 asp.net ajax 扩展_ajax教程
·在虚拟主机上部署asp.net ajax 1.0 beta的程序集_ajax教程

最新文章
·从两方面看ajax与b/s_ajax教程
·mashups+ajax打造全新web开发_ajax教程
·photoshop照片合成:简单九步做雪地马群_photoshop教程
·用ajax编写用户注册时的应用实例_ajax教程
·photoshop处理唯美梦幻抽线特效_photoshop教程
·ajax的server部分(php版)_ajax教程
·轻松实现无刷新三级联动菜单[vs2005与ajaxpro]_ajax教程
·让你轻松排除windows xp系统启动故障_windows xp
·photoshop处理艺术照:淡雅色调_photoshop教程
·asp.net ajax 客户端生命周期事件_ajax教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号