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中style属性
Oct 11 Javascript
javascript 数据类型转换(parseInt,parseFloat)
Jul 20 Javascript
原生js 秒表实现代码
Jul 24 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
Jan 24 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
Aug 02 Javascript
jquery插件jquery倒计时插件分享
Dec 27 Javascript
jQuery实现点击该行即可删除HTML表格行
Oct 17 Javascript
javascript正则表达式使用replace()替换手机号的方法
Jan 19 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
Jan 05 Javascript
JavaScript中的一些隐式转换和总结(推荐)
Dec 22 Javascript
JS简单获取并修改input文本框内容的方法示例
Apr 08 Javascript
springboot+vue实现文件上传下载
Nov 17 Vue.js
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实现手机归属地查询API接口实现代码
2012/08/27 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
js控制CSS样式属性语法对照表
2012/12/11 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
python 函数传参之传值还是传引用的分析
2017/09/07 Python
python http接口自动化脚本详解
2018/01/02 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
音乐表演专业毕业生求职信
2013/10/14 职场文书
写给爸爸的道歉信
2014/01/15 职场文书
房地产开盘策划方案
2014/02/10 职场文书
实习指导教师评语
2014/12/30 职场文书
党员争先创优承诺书
2015/01/20 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js