js 实现对ajax请求面向对象的封装

AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,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请求,会使得代码很臃肿,不方便重用,并且可以看到,可能在服务器响应成功后要处理一个业务逻辑操作,这个时候不得不把操作写在onreadystatechage方法里面。

为了方便代码的重用我们可以做出如下处理;
      1、服务器响应成功后,要处理的业务逻辑交给开发人员自己处理
      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请求面向对象的封装

时间: 2024-08-05 21:58:25

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

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

jmeter一直是一款很好的接口和性能测试工具,它是开源的,不需要为此支付任何费用,而且可以下载源码,可以在修改源代码并在此基础上拓展自己的功能或插件,它可以跟ant和jenkins结合起来搭建自己的自动化接口测试框架.它的好还在于它是纯JAVA开发的,因此,它可以更好的跟JAVA对接,通过引入自己封装的jar文件,可以方便的实现对jmeter各种个性化需求的功能的拓展,下面以一个实际例子来说明jmeter怎么引入自己开发的java工具类来实现对http请求参数的加密处理. 在此之前,我们假设有

mockjax MOCK.js的拦截ajax请求

今天看了下 mock.js的拦截请求 .https://github.com/nuysoft/Mock/blob/master/src/mockjax.js //覆盖(拦截) Ajax 请求,目前内置支持 jQuery.Zepto.KISSY 拦截请求的前提是基于各类库的 内置方法来进行拦截. 比如jquery. 在$.ajax() 之前 会有一个前置过滤器$.ajaxPrefilter() 先进行处理,然后根据参数的不同来分发请求(模拟或者直接发送请求). 在模拟的时候 可以根据给出的参数 返

js方法内Ajax请求数据判断,验证无效(OnClientClick="return Method();"),还是直接执行后台代码

function CheckAdd() { var flag = true; $.ajax({ cache: false, async: false, url: "/ajaxpage/getajax.aspx?t=adjserviceclientlist&Cellphone=" + Cellphone + "&a=" + Math.random(), dataType: 'json', success: function (data) { if (d

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

/** * 增加对JSON数据的序列化方法, * 主要用于IE6.7不支持JSON对象的浏览器 */ var xue = xue || {};xue.json = xue.json || {}; xue.json.stringify = function(obj) {    //如果是IE8+ 浏览器(ff,chrome,safari都支持JSON对象),使用JSON.stringify()来序列化    if (window.JSON) {        return JSON.stringi

解决Django中在.js文件中用ajax请求后端,找不到CSRF问题

function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie s

[asp.net] 通过JS实现对treeview控件的复选框单选控制。

前端JS代码: //识别不同的浏览器 function getTargetElement(evt) { var elem if (evt.target) { elem = (evt.target.nodeType == 3) ? evt.target.parentNode : evt.target } else { elem = evt.srcElement } return elem } var lastC = null; function OnClientTreeNodeChecked(ev

c++实现对windwos 下socket 的封装(实现封包及拆包处理)

SuperSocket.h #pragma once #include<string> #include<iostream> #include <WINSOCK2.H> #include "MyThread.h" #include "SuperThread.h" using namespace std; class SuperSocket { public: typedef struct SockData{ int id; int

js jQuery中Ajax请求参数转义问题

前几天在工作的时候,在和移动端做接口的时候发现,前端在传递参数的时候其中有+或者&时候,服务器获得串中+或者&都变成了空格,后台Java程序在解析的时候出错了! 具体代码如下: $(function () { var isPc = !(window.__detect.android||window.__detect.ios||window.__detect.phone), moonCakeNums, moonCakeIdentify= 0, <span style="col

js实现对table的增加行和删除行的操作

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ