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 相关文章推荐
newxtree.js代码
Mar 13 Javascript
jQuery动态创建html元素的常用方法汇总
Sep 05 Javascript
javascript+html5实现绘制圆环的方法
Jul 28 Javascript
JavaScript中判断数据类型的方法总结
May 24 Javascript
AngularJS基础 ng-cloak 指令简单示例
Aug 01 Javascript
jQuery获取select选中的option的value值实现方法
Aug 29 Javascript
基于AngularJS实现iOS8自带的计算器
Sep 12 Javascript
利用js给datalist或select动态添加option选项的方法
Jan 25 Javascript
浅谈JS对象添加getter与setter的5种方法
Jun 09 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
Feb 20 Javascript
jQuery实现弹幕特效
Nov 29 jQuery
js实现二级联动简单实例
Jan 11 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
利用php绘制饼状图的实现代码
2013/06/07 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
JavaScript 继承详解(四)
2009/07/13 Javascript
javascript动态加载二
2012/08/22 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
python使用range函数计算一组数和的方法
2015/05/07 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
Python Cookie 读取和保存方法
2018/12/28 Python
Python中的asyncio代码详解
2019/06/10 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
小学信息技术教学反思
2014/02/10 职场文书
楼面部长岗位职责范本
2014/02/14 职场文书
采购部长岗位职责
2014/06/13 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
法律服务所工作总结
2015/08/10 职场文书
学校就业保障协议书
2019/06/24 职场文书
logback如何自定义日志存储
2021/08/30 Java/Android