AJAX 是一种用于创建高速动态网页的技术。通过在后台与server进行少量数据交换。AJAX 能够使网页实现异步更新。这意味着能够在不又一次载入整个网页的情况下,对网页的某部分进行更新。

        在js中使用ajax请求一般包括三个步骤:

              1、创建XMLHttp对象

              2、发送请求:包含打开链接、发送请求

              3、处理响应

        在不使用不论什么的js框架的情况下。要想使用ajax。可能须要向以下一样进行代码的编写

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());

假设在比較复杂的业务逻辑里面使用这样的ajax请求,会使得代码非常臃肿,不方便重用,而且能够看到,可能在server响应成功后要处理一个业务逻辑操作。这个时候不得不把操作写在onreadystatechage方法里面。

为了方便代码的重用我们能够做出例如以下处理;
1、server响应成功后,要处理的业务逻辑交给开发者自己处理
2、对请求进行面向对象的封装 处理之后看起来应该像以下这个样子:
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操作,读者有不懂的地方能够慢慢思考或者在此留言

js 实现对ajax请求面向对象的封装的更多相关文章

  1. jmeter通过BeanShell 脚本,实现对http请求参数的加密

    jmeter一直是一款很好的接口和性能测试工具,它是开源的,不需要为此支付任何费用,而且可以下载源码,可以在修改源代码并在此基础上拓展自己的功能或插件,它可以跟ant和jenkins结合起来搭建自己的 ...

  2. mockjax MOCK.js的拦截ajax请求

    今天看了下 mock.js的拦截请求 .https://github.com/nuysoft/Mock/blob/master/src/mockjax.js //覆盖(拦截) Ajax 请求,目前内置 ...

  3. 原生js,jquery ajax请求以及jsonp的调用

    ajax    是用来处理前后端交互的技术,可以改善用户体验,其本质是    XMLHttpRequest,异步访问服务器并发送请求数据,服务器返回响应的数据,以页面无刷新的效果改变页面中的局部内容  ...

  4. [JS] IE下ajax请求不生效或者请求结果不更新

    问题描述: IE8及以下版本里用jQuery发简单的GET时,第一次或者新开窗口后的请求没问题,可以正确返回结果.但是之后刷新页面或者触发某些操作得到的ajax请求结果永远和第一次一样. 问题分析: ...

  5. js在方法Ajax请求数据来推断,验证无效(OnClientClick="return Method();"),或者直接运行的代码隐藏

    function CheckAdd() { var flag = true; $.ajax({ cache: false, async: false, url: "/ajaxpage/get ...

  6. js拦截全局ajax请求

    你是否有过下面的需求:需要给所有ajax请求添加统一签名.需要统计某个接口被请求的次数.需要限制http请求的方法必须为get或post.需要分析别人网络协议等等,那么如何做?想想,如果能够拦截所有a ...

  7. js 拦截全局 ajax 请求

    你是否有过下面的需求:需要给所有ajax请求添加统一签名.需要统计某个接口被请求的次数.需要限制http请求的方法必须为get或post.需要分析别人网络协议等等,那么如何做?想想,如果能够拦截所有a ...

  8. 对ajax请求的简单封装,操作更方便

    我这里的接口数据调用的js叫interface.js,接口路径管理的js叫webSiteControl.js /** * Created by l2776 on 2017/7/11. * 接口数据调用 ...

  9. js实现对json数据的序列化(兼容ie6以上浏览器)

    /** * 增加对JSON数据的序列化方法, * 主要用于IE6.7不支持JSON对象的浏览器 */ var xue = xue || {};xue.json = xue.json || {}; xu ...

随机推荐

  1. NodeJs学习记录(五)初学阶段关于ejs和路由

    1.因为只是用了一点皮毛,所以使用起来感觉基本和jsp无异, 逻辑代码块使用  <%  if() {} else  %> , 输出参数值使用 <%=title  %>, 有一个 ...

  2. Android setOnPageChangeListener 过时了怎么办?

    今天使用ViewPager发现setOnPageChangeListener的方法居然过期了,而且AS编译不通过了,最后查了一下原来把set换成add了,代码如下: setOnPageChangeLi ...

  3. IE 浏览器在地址栏输入中文字符,发送get请求报400错误的问题

    因为学校有JavaWeb的课程,所以才接触这方面.最近遇到了个小问题. 先看一段很简单的jsp代码例子 <%@ page language="java" import=&qu ...

  4. solr深分页,游标操作分页,解决性能问题

    solr深分页,游标操作分页,解决性能问题 @Test public void pageByCursor() { try { solrServer.connect(); String query = ...

  5. Oracl常用e函数整理

    最近学Oracle数据库,常常遇到Oracle数据库函数问题,经过默默地琢磨处理,总结了一些Oracle数据库常用函数. ------------------------------------ -- ...

  6. LockDemo 锁对象

    class Resource { private boolean flag = false; private String name; private int count; //资源锁 Lock lo ...

  7. (转)Hibernate框架基础——多对多关联关系映射

    http://blog.csdn.net/yerenyuan_pku/article/details/52756536 多对多关联关系映射 多对多的实体关系模型也是很常见的,比如学生和课程的关系.一个 ...

  8. HDU_1506_Largest Rectangle in a Histogram_dp

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  9. CAD得到ImageMark数据(com接口VB语言)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  10. java虚拟机(二)--类加载机制和双亲委派模型

    一.类的生命周期 加载(Loading).验证(Verification).准备(Preparation).解析(Resolution).初始化(Initialization).使用(Using).卸 ...