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 相关文章推荐
popdiv
Jul 14 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
Jul 21 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
Mar 30 Javascript
jquery验证邮箱格式并显示提交按钮
Nov 07 Javascript
JS获取鼠标相对位置的方法
Sep 20 Javascript
Vue进度条progressbar组件功能
Apr 17 Javascript
解决Mac node版本升级失败的问题
May 16 Javascript
抖音上用记事本编写爱心小程序教程
Apr 17 Javascript
在Vue中使用antv的示例代码
Jun 29 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
Oct 15 Javascript
javascript中layim之查找好友查找群组
Feb 06 Javascript
js判断两个数组相等的5种方法
May 06 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面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
详解python tkinter 图片插入问题
2020/09/03 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
应届生污水处理求职信
2013/11/06 职场文书
洗车工岗位职责
2014/03/15 职场文书
校园活动策划方案
2014/06/13 职场文书
应届生自荐信
2014/06/30 职场文书
财务检查整改报告
2014/11/06 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android