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 相关文章推荐
iframe 上下滚动条如何默认在下方实现原理
Dec 10 Javascript
jquery中获取id值方法小结
Sep 22 Javascript
往光标所在位置插入值的js代码
Sep 22 Javascript
JS中如何设置readOnly的值
Dec 25 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
JavaScript中匿名函数用法实例
Mar 23 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
May 31 Javascript
微信JS接口大全
Aug 25 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
Sep 05 Javascript
Angular 4中如何显示内容的CSS样式示例代码
Nov 06 Javascript
基于node.js实现微信支付退款功能
Dec 19 Javascript
在vue中使用eslint,配合vscode的操作
Nov 09 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安全配置方法
2007/06/16 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
python根据路径导入模块的方法
2014/09/30 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
非常详细的C#面试题集
2016/07/13 面试题
厂办主管岗位职责范本
2014/02/28 职场文书
农村改厕实施方案
2014/03/22 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
2014年派出所工作总结
2014/11/21 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
奠基仪式致辞
2015/07/30 职场文书
运动会主持人开幕词
2016/03/04 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
HttpClient实现表单提交上传文件
2022/08/14 Java/Android