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 相关文章推荐
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
Oct 24 Javascript
jquery+json 通用三级联动下拉列表
Apr 19 Javascript
关于hashchangebroker和statehashable的补充文档
Aug 08 Javascript
jQuery实现切换页面布局使用介绍
Oct 09 Javascript
AspNet中使用JQuery boxy插件的确认框
May 20 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 Javascript
JavaScript获取短信验证码(周期性)
Dec 29 Javascript
JS实现手写parseInt的方法示例
Sep 24 Javascript
angular4中引入echarts的方法示例
Jan 29 Javascript
微信小程序 checkbox使用实例解析
Sep 09 Javascript
微信小程序保持session会话的方法
Mar 20 Javascript
原生JS实现飞机大战小游戏
Jun 09 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遍历数组的方法汇总
2015/04/30 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
动手学习无线电
2021/03/10 无线电
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
js实现文字列表无缝滚动效果
2017/06/23 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
Python素数检测实例分析
2015/06/15 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
python中的decorator的作用详解
2018/07/26 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
python 实现性别识别
2020/11/21 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
某公司的.net工程师面试题笔试题
2013/11/22 面试题
财务总监管理岗位职责
2014/03/08 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
预防煤气中毒方案
2014/06/16 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
护士个人总结范文
2015/02/13 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js