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中的Location地址对象
Jan 16 Javascript
javascript完美拖拽的实现方法
Sep 29 Javascript
div模拟滚动条效果示例代码
Oct 16 Javascript
在jquery中combobox多选的不兼容问题总结
Dec 24 Javascript
ActiveX控件与Javascript之间的交互示例
Jun 04 Javascript
简单实现异步编程promise模式
Jul 31 Javascript
jQuery时间日期三级联动(推荐)
Nov 27 Javascript
使用原生js写ajax实例(推荐)
May 31 Javascript
vue.js 实现点击按钮动态添加li的方法
Sep 07 Javascript
vue 本地环境跨域请求proxyTable的方法
Sep 19 Javascript
详解javascript中的Error对象
Apr 25 Javascript
vue和小程序项目中使用iconfont的方法
May 19 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+APACHE实现用户论证的方法
2006/10/09 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
javascript Keycode对照表
2009/10/24 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
Python 自动补全(vim)
2014/11/30 Python
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
What is view? why do we have view?
2012/06/22 面试题
安全生产演讲稿
2014/05/09 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
先进教师事迹材料
2014/12/16 职场文书
综合测评自我评价
2015/03/06 职场文书
房租涨价通知
2015/04/23 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
python urllib库的使用详解
2021/04/13 Python
MySQL中日期型单行函数代码详解
2021/06/21 MySQL