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中删除元素的实现代码
Dec 29 Javascript
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
Sep 23 Javascript
JavaScript编程的单例设计模讲解
Nov 10 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
Jun 17 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
Sep 20 Javascript
Yarn的安装与使用详细介绍
Oct 25 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
Dec 04 Javascript
微信小程序 实现动态显示和隐藏某个控件
Apr 27 Javascript
浅谈webpack 构建性能优化策略小结
Jun 13 Javascript
React Native基础入门之初步使用Flexbox布局
Jul 02 Javascript
vue单页应用的内存泄露定位和修复问题小结
Aug 02 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
利用static实现表格的颜色隔行显示
2006/10/09 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
Laravel下生成验证码的类
2017/11/15 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
JS 对象介绍
2010/01/20 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
Python 命令行非阻塞输入的小例子
2013/09/27 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
后勤采购员岗位职责
2013/12/19 职场文书
求职简历的自我评价
2014/01/31 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
TS 类型收窄教程示例详解
2022/09/23 Javascript