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


Posted in Javascript onJanuary 08, 2016

AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
在js中使用ajax请求一般包含三个步骤:

  •               1、创建XMLHttp对象
  •               2、发送请求:包括打开链接、发送请求
  •               3、处理响应

在不使用任何的js框架的情况下,要想使用ajax,可能需要向下面一样进行代码的编写

<span style="font-size:14px;">var xmlHttp = xmlHttpCreate();//创建对象 
xmlHttp.onreadystatechange = function(){//响应处理 
  if(xmlHttp.readyState == 4){ 
    console.info("response finish"); 
    if(xmlHttp.status == 200){ 
       console.info("reponse success"); 
      console.info(xmlHttp.responseText); 
    } 
  } 
} 
xmlHttp.open("get","TestServlet",true);//打开链接 
 
xmlHttp.send(null);//发送请求 
 
function xmlHttpCreate() { 
  var xmlHttp; 
  try { 
    xmlHttp = new XMLHttpRequest;// ff opera 
  } catch (e) { 
    try { 
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");// ie 
    } catch (e) { 
      try { 
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e) { 
 
      } 
    } 
  } 
  return xmlHttp; 
} 
 
console.info(xmlHttpCreate());</span>

如果在比较复杂的业务逻辑里面使用这种ajax请求,会使得代码很臃肿,不方便重用,并且可以看到,可能在服务器响应成功后要处理一个业务逻辑操作,这个时候不得不把操作写在onreadystatechage方法里面。
为了方便代码的重用我们可以做出如下处理;  

  •       1、服务器响应成功后,要处理的业务逻辑交给开发人员自己处理 
  •       2、对请求进行面向对象的封装  

处理之后看起来应该像下面这个样子: 

<pre code_snippet_id="342814" snippet_file_name="blog_20140513_2_2489549" name="code" class="javascript">window.onload = function() { 
  document.getElementById("hit").onclick = function() { 
    console.info("开始请求"); 
    ajax.post({ 
        data : 'a=n', 
        url : 'TestServlet', 
        success : function(reponseText) { 
          console.info("success : "+reponseText); 
        }, 
        error : function(reponseText) { 
          console.info("error : "+reponseText); 
        } 
    }); 
  } 
} 
 
var ajax = { 
  xmlHttp : '', 
  url:'', 
  data:'', 
  xmlHttpCreate : function() { 
    var xmlHttp; 
    try { 
      xmlHttp = new XMLHttpRequest;// ff opera 
    } catch (e) { 
      try { 
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");// ie 
      } catch (e) { 
        try { 
          xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
        } catch (e) { 
 
        } 
      } 
    } 
    return xmlHttp; 
  }, 
  post:function(jsonObj){ 
    ajax.data = jsonObj.data; 
    ajax.url = jsonObj.url; 
    //创建XMLHttp对象,打开链接、请求、响应 
    ajax.xmlHttp = ajax.xmlHttpCreate(); 
    ajax.xmlHttp.open("post",ajax.url,true); 
    ajax.xmlHttp.onreadystatechange = function(){ 
      if(ajax.xmlHttp.readyState == 4){ 
        if(ajax.xmlHttp.status == 200){ 
          jsonObj.success(ajax.xmlHttp.responseText); 
        }else{ 
          jsonObj.error(ajax.xmlHttp.responseText); 
        } 
      } 
    } 
    ajax.xmlHttp.send(ajax.data); 
  } 
};

上述代码实现了类似jquery中的ajax操作,希望对大家的学习有所帮助。

Javascript 相关文章推荐
JS实现仿google、百度搜索框输入信息智能提示的实现方法
Apr 20 Javascript
javascript监听页面刷新和页面关闭事件方法详解
Jan 09 Javascript
js 性能优化之快速响应的用户界面
Feb 15 Javascript
jquery实现自适应banner焦点图
Feb 16 Javascript
Angular.js组件之input mask对input输入进行格式化详解
Jul 10 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 Javascript
微信小程序实现文字跑马灯
May 26 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
Jan 18 Javascript
javascript定时器的简单应用示例【控制方块移动】
Jun 17 Javascript
VScode格式化ESlint方法(最全最好用方法)
Sep 10 Javascript
js实现简单的轮播图效果
Dec 13 Javascript
Js类的构建与继承案例详解
Sep 15 Javascript
javascript弹性运动效果简单实现方法
Jan 08 #Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
Jan 08 #Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
Jan 08 #Javascript
jquery实现简单的遮罩层
Jan 08 #Javascript
javascript多物体运动实现方法分析
Jan 08 #Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
Jan 08 #Javascript
javascript匀速运动实现方法分析
Jan 08 #Javascript
You might like
1 Tube Radio
2021/03/02 无线电
如何去掉文章里的 html 语法
2006/10/09 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
javascript some()函数用法详解
2014/11/13 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
在html页面上拖放移动标签
2010/01/08 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
微信小程序中转义字符的处理方法
2019/03/28 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
python开发前景如何
2020/06/11 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
指针和引用有什么区别
2013/01/13 面试题
大学生实习期自我评价范文
2013/10/03 职场文书
经典的班主任推荐信
2013/10/28 职场文书
法制宣传月活动方案
2014/05/11 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
学雷锋标语
2014/06/25 职场文书
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技