ajax调用框架

jian_ajax.js: 

/**
 * ============================================================ 
 * A J A X
 * ============================================================ 
 * DESCRIPTION: ajax调用框架,供页面简单快速调用来实现ajax通信
 * @AUTHOR: xiaolong8
 * @VERSION: 1.0.0
 * @SEE:   
 * @CREATION DATE: 2012‎年‎3‎月‎24‎日,‏‎9:59:30
 * @DATE: 2012-3-25 16:57:44
 * COPYRIGHT: 失业中
 ***************************************************************/
 
/** 
 * 使用方法:
 * 一、将js文件引入需使用ajax的HTML文档,在HTML文档添加:<script type="text/javascript" src="jian_ajax.js"></script>
 * 二、调用方法。
 * 1) GET方式:
 * @example   ajax.get("servlet/AjaxServlet", {
 * 							item0: document.getElementById("item0").value,
 * 							item1: document.getElementById("item1").value
 * 						}, {
 * 							sucess: function(responseXML, responseText){
 * 										alert(responseText);
 * 									},
 *							fail: function(responseXML, responseText){
 *										alert("fail");
 *									}
 *						});
 *
 * 2) POST方式:
 * @example   1) URL编码形式提交。
 * 				 ajax.post("servlet/AjaxServlet", 
 * 							ajax.CONTENT_TYPE_URLENCODED,  {
 * 								item0: document.getElementById("item0").value,
 * 								item1: document.getElementById("item1").value
 *	 						}, {
 * 								sucess: function(responseXML, responseText){
 * 											alert(responseText);
 * 										},
 *								fail: function(responseXML, responseText){
 *											alert("fail");
 *										}
 *							});
 *			  2) 大块二进制数据形式提交,如文件上传。
 *				ajax.post("servlet/AjaxServlet", 
 * 							ajax.CONTENT_TYPE_DATA, 
 * 							"send content.", {
 * 								sucess: function(responseXML, responseText){
 * 											alert(responseText);
 * 										},
 *								fail: function(responseXML, responseText){
 *											alert("fail");
 *										}
 *							});
 */
 

	/* 全局变量ajax */
	var ajax = {
			/** 常量: POST提交请求报文头方式 */
			/* application/x-www-form-urlencoded: 表示客户端提交给服务器文本内容的编码方式是URL编码 */
			CONTENT_TYPE_URLENCODED: "application/x-www-form-urlencoded", 
			/* multipart/form-data: 表示客户端提交给服务器的为数据,一般都是大块二进制数据,如文件。 */
			CONTENT_TYPE_DATA: "multipart/form-data",
			
			/* XMLHttpRequest对象 */
			xhr: null,
			
			/* 请求回应后的回调函数对象
			 * 约定格式: 
			 * {
			 *  	sucess: function(responseXML, responseText){
			 *  				...//请求成功执行的操作
			 *				},
			 *		fail: function(responseXML, responseText){
			 *  				...//请求失败执行的操作
			 *  			}
			 * } 
			 */
			callback: null,

			/**
			 * 创建XMLHttpRequest对象
			 * @param 
			 * @return 
			 * @example   
			 */
			createXhr: function(){
					if(ajax.xhr == null){
						if(window.XMLHttpRequest){
							ajax.xhr = new XMLHttpRequest();
						} else if(window.ActiveXObject){
							try {
								ajax.xhr = new ActiveXObject("MSXML2.XMLHTTP");
							} catch(e){
								try {
									ajax.xhr = new ActiveXObject("Microsoft.XMLHTTP");
								} catch(e_){}
							}
						}
					}
				},
				
			/**
			 * 编码参数。将对象编码成url形式
			 * @param   params   请求附带参数对象。
			 * 				约定格式:普通非嵌套对象,即每个属性名 对应 一个非对象的属性值,
			 * 				如{username: "xiaolong", password: "xxxxxx"}
			 * @return   url形式的字符串,如:username=xiaolong&password=xxxxxx
			 * @example   var urlSuffix = encodeParams({username: "xiaolong", password: "xxxxxx"});
			 */
			 encodeParams: function(params){
			 	var s = "";
			 	for (var i in params) {
			 		s += "&" + i + "=" +params[i];
			 	}
			 	s = s.substr(1);	
			 	
			 	return s;
			 },
			 
			/**
			 * 以get方式获取数据
			 * @param   url   请求的地址
			 * @param	params   请求附带参数对象,
			 * 				约定格式:普通非嵌套对象,即每个属性名 对应 一个非对象的属性值,
			 * 				如{username: "xiaolong", password: "xxxxxx"}
			 * @param	callback   请求回应后的回调函数对象
			 * 				约定格式: 
			 * 				{
			 *  				sucess: function(responseXML, responseText){
			 *  					...//请求成功执行的操作
			 *					},
			 *					fail: function(responseXML, responseText){
			 *  					...//请求失败执行的操作
			 *  				}
			 * 				} 
			 * @return 
			 * @example   ajax.get("servlet/AjaxServlet", {
			 * 							item0: document.getElementById("item0").value,
			 * 							item1: document.getElementById("item1").value
			 * 						}, {
			 * 							sucess: function(responseXML, responseText){
			 * 										alert(responseText);
			 * 									},
			 *							fail: function(responseXML, responseText){
			 *										alert("fail");
			 *									}
			 *						});
			 */
			 get: function(url, params, callback){
					ajax.callback = callback;
			 		if (!ajax.xhr) {
			 			ajax.createXhr();
			 		}
			 		if (ajax.xhr) {
				 		ajax.xhr.open("GET", encodeURI(url + "?" + ajax.encodeParams(params)), true);
				 		ajax.xhr.onreadystatechange = ajax.handleStateChange;
				 		ajax.xhr.send(null);
				 	}
			 },
			 
			/**
			 * 以post方式获取数据
			 * @param   url   请求的地址
			 * @param   enctype   POST提交请求报文头编码类型
			 * @param	content   发送内容
			 * @param	callback   请求回应后的回调函数对象
			 * 				约定格式: 
			 * 				{
			 *  				sucess: function(responseXML, responseText){
			 *  					...//请求成功执行的操作
			 *					},
			 *					fail: function(responseXML, responseText){
			 *  					...//请求失败执行的操作
			 *  				}
			 * 				} 
			 * @return 
			 * @example   1) ajax.post("servlet/AjaxServlet", 
			 * 							ajax.CONTENT_TYPE_URLENCODED,  {
			 * 								item0: document.getElementById("item0").value,
			 * 								item1: document.getElementById("item1").value
			 *	 						}, {
			 * 								sucess: function(responseXML, responseText){
			 * 											alert(responseText);
			 * 										},
			 *								fail: function(responseXML, responseText){
			 *											alert("fail");
			 *										}
			 *							});
			 *			  2) ajax.post("servlet/AjaxServlet", 
			 * 							ajax.CONTENT_TYPE_DATA, 
			 * 							"send content.", {
			 * 								sucess: function(responseXML, responseText){
			 * 											alert(responseText);
			 * 										},
			 *								fail: function(responseXML, responseText){
			 *											alert("fail");
			 *										}
			 *							});
			 */
			 post: function(url, enctype, content, callback){
			 	ajax.callback = callback;
			 	if(!ajax.xhr){
			 		ajax.createXhr();
			 	}
			 	if(ajax.xhr){
			 		ajax.xhr.open("POST", encodeURI(url), true);
			 		ajax.xhr.onreadystatechange = ajax.handleStateChange;
			 		if(ajax.CONTENT_TYPE_URLENCODED == enctype){
				 		ajax.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				 		ajax.xhr.send(encodeURI(ajax.encodeParams(content)));
			 		} else if(ajax.CONTENT_TYPE_DATA == enctype){
				 		ajax.xhr.setRequestHeader("Content-Type", "multipart/form-data");
				 		ajax.xhr.send(content);
			 		}
			 	}
			 },
			 
			/**
			 * 处理readyState属性改变时的事件
			 * @param   
			 * @return 
			 * @example
			 */
			 handleStateChange: function(){
			 	if(ajax.xhr.readyState == 4){// 数据接收完毕,此时可以通过通过responseXML和responseText获取完整的回应数据
			 		if(ajax.xhr.status == 200){// 200: OK
			 			ajax.callback.sucess(ajax.xhr.responseXML, ajax.xhr.responseText);
			 		} else{
			 			ajax.callback.fail(ajax.xhr.responseXML, ajax.xhr.responseText);
			 		}
			 	}
			}
		};
    
//		var ajaxTools = function(){
//			this.xmlHttpReq = null;
//			this.callback = null;
//			
//			this.createXmlRequest = function(){
//				if(window.XMLHttpRequest){
//					this.xmlHttpReq = new XMLHttpRequest();
//				} else if(window.ActiveXObject){
//					try {
//						this.xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
//					} catch(e){
//						try {
//							this.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
//						} catch(e_){}
//					}
//				}
//			};
//
//			this.get = function(url, callbackFunc) {
//				this.callback = callbackFunc;
//				if(!this.xmlHttpReq){
//					this.createXmlRequest();
//				}
//				if(this.xmlHttpReq){
//					this.xmlHttpReq.open("GET", url, true);
//					this.xmlHttpReq.onreadystatechange = this.processResponse;
//					this.xmlHttpReq.send(null);
//				}
//			};
//
//			this.processResponse = function (){
//				if(this.readyState == 4){// 数据接收完毕,此时可以通过通过responseXML和responseText获取完整的回应数据
//					if(this.status == 200){// 200: OK
//						//var res = XMLHttpReq.responseXML.getElementsByTagName("res")[0].firstChild.data;
//						parent.callback.sucess(this.responseXML, this.responseText);
//					} else{
//						parent.callback.fail(this.responseXML, this.responseText);
//					}
//				}
//			};
//			return this;
//		}();
    

PS:

POST提交请求报文头编码类型,表单enctype属性:
1) application/x-www-form-urlencoded: 默认值,只要是能输出网页的服务器端环境都可以
2) multipart/form-data: 上传二进制数据,只有使用multipart/form-data ,才能完整的传递文件数据,进行上传操作

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值