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 预解析
Oct 25 Javascript
js获取光标位置和设置文本框光标位置示例代码
Jan 09 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
Jun 14 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
Jun 26 Javascript
BootStrap表单宽度设置方法
Mar 10 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
Mar 21 jQuery
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
详解React native全局变量的使用(跨组件的通信)
Sep 07 Javascript
Vue.js 利用v-for中的index值实现隔行变色
Aug 01 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
Oct 19 Javascript
CountUp.js实现数字滚动增值效果
Oct 17 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 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文件缓存类用法实例分析
2015/04/22 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
python 文件和路径操作函数小结
2009/11/23 Python
Python代理抓取并验证使用多线程实现
2013/05/03 Python
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
python遍历小写英文字母的方法
2019/01/02 Python
python实现实时视频流播放代码实例
2020/01/11 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
python列表返回重复数据的下标
2020/02/10 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
与UNIX有关的几个名词
2015/09/17 面试题
教师求职自荐信
2014/03/09 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
党章培训心得体会
2014/09/04 职场文书
秋冬农业生产标语
2014/10/09 职场文书
学习保证书怎么写
2015/02/26 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
导游词之包公祠
2019/11/25 职场文书
Python绘制分类图的方法
2021/04/20 Python
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫
利用Python多线程实现图片下载器
2022/03/25 Python