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 相关文章推荐
javascript读取RSS数据
Jan 20 Javascript
javascript中的array数组使用技巧
Jan 31 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
JavaScript列表框listbox全选和反选的实现方法
Mar 18 Javascript
JavaScript中数据结构与算法(一):栈
Jun 19 Javascript
javascript 应用小技巧方法汇总
Jul 05 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
Aug 05 Javascript
jQuery 实现双击编辑表格功能
Jun 19 jQuery
详解vue-resource promise兼容性问题
Jun 20 Javascript
使用async、enterproxy控制并发数量的方法详解
Jan 02 Javascript
vue项目中仿element-ui弹框效果的实例代码
Apr 22 Javascript
详解Vue中的Props与Data细微差别
Mar 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
isset和empty的区别
2007/01/15 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
深入浅出php socket编程
2015/05/13 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
js动态切换图片的方法
2015/01/20 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
node网页分段渲染详解
2016/09/05 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
带你了解python装饰器
2017/06/15 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
运动会通讯稿400字
2014/01/28 职场文书
租车协议书范本
2014/04/22 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
保密工作承诺书
2014/08/29 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
患者身份识别制度
2015/08/06 职场文书
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js