一个简略的AJAX类
一个简单的AJAX类
<!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-Type" content="text/html; charset=utf-8" /> <title>Ajax类</title> <script type="text/javascript"> function xStr(s) { for (var i = 0; i < arguments.length; ++i) { if (typeof (arguments[i]) != 'string') return false } return true } var ylib = function() { return { util: {}, widget: {}, namespace: function(sNameSpace) { if (!xStr(sNameSpace)) return null; var levels = sNameSpace.split('.'); var thisNameSpace = ylib; for (var i = (levels[0] == 'ylib' ? 1: 0); i < levels.length; i++) { thisNameSpace[levels[i]] = thisNameSpace[levels[i]] || {}; thisNameSpace = thisNameSpace[levels[i]]; } } }; } (); ylib.namespace('ylib.util'); ylib.util.READY_STATE_UNINITIALIZED = 0;//还未被初始化 ylib.util.READY_STATE_LOADING = 1;//准备加载 ylib.util.READY_STATE_LOADED = 2;//正在加载 ylib.util.READY_STATE_INTERACTIVE = 3;//验证 ylib.util.READY_STATE_COMPLETE = 4;//完成 ylib.util.AjaxLib = function (url, callBackHandler, errorHandler, method, params, contentType) { this.url = url; this.callBackHandler = callBackHandler; this.errorHandler = (errorHandler) ? errorHandler : this.DefaultErrorHandler; this.method = (method) ? method : 'GET'; this.params = (params) ? params : []; this.contentType = contentType; if (!contentType && method == "POST") { this.contentType = 'application/x-www-form-urlencoded'; } }; ylib.util.AjaxLib.prototype = { SendRequest: function () { var request = this.getHTTPObject(); if (request) { var requestParams = []; for (var i = 0; i < arguments.length; i++) { requestParams.push(arguments[i]); } var loader = this; var url = this.url; if (this.method == 'GET' && requestParams.length > 0) { var qs = this.GetFullQuerystring(requestParams); if (qs) { if (url.indexOf('?') == -1) { url += '?' + qs; } else { url += '&' + qs; } } } try { request.onreadystatechange = function () { loader.HandleAjaxResponse.call(loader, request); }; request.open(this.method, url, true); if (this.contentType) request.setRequestHeader('Content-Type', this.contentType); request.setRequestHeader('encoding', 'UTF-8'); if (this.method == 'GET') { request.send(null); } else { request.send(this.GetFullQuerystring(requestParams)); } } catch (err) { loader.error = err; this.errorHandler.call(loader, request); } } }, getHTTPObject: function () { var http; var browser = navigator.appName; if(browser == "Microsoft Internet Explorer"){ http = new ActiveXObject("Microsoft.XMLHTTP"); }else{ http = new XMLHttpRequest(); } return http; }, GetFullQuerystring: function (args) { var requestParams = []; for (var i = 0; i < this.params.length; i++) { if (this.params[i]) requestParams.push(this.params[i]); } for (var i = 0; i < args.length; i++) { if (args[i]) requestParams.push(args[i]); } var qs = ""; if (requestParams && requestParams.length > 0) { qs = requestParams.join("&"); } return qs; }, HandleAjaxResponse: function (request) { var loader = this; if (request.readyState == ylib.util.READY_STATE_COMPLETE) { if (loader.RequestSuccess(request)) { loader.callBackHandler.call(loader, request); } else { loader.errorHandler.call(loader, request); } request = null; } }, RequestSuccess: function (request) { return request.status == 0 || (request.status >= 200 && request.status < 300); }, DefaultErrorHandler : function (request) { var mess = "请求发送失败!"; if (this) { if (this.url) mess += "\n\nurl:" + this.url; if (this.method) mess += "\n\nmethod:" + this.method; if (this.contentType) mess += "\n\ncontentType:" + this.contentType; if (this.params) mess += "\n\nparams:" + this.params; if (this.error) { if (this.error.name) mess += "\n\nerror name:" + this.error.name; if (this.error.message) mess += "\n\nerror message:" + this.error.message; } } if (request) { if (request.readyState) mess += "\n\nreadyState:" + request.readyState; try { if (request.status) mess += "\n\nstatus:" + request.status; } catch (err) {} try { if (request.getAllResponseHeaders) mess += "\n\nheaders:" + request.getAllResponseHeaders(); } catch (err) {} } alert(mess); } }; <!--调用方式--> var lib = new ylib.util.AjaxLib("t.jsp",createAjaxCallBack,"","POST"); function creatAjax(){ lib.SendRequest("a=123452","v=12312"); } function createAjaxCallBack(request){ var jsonArray = request.responseText; alert(jsonArray) } </script> </head> <body> <input type="button" value="创建AJAX请求" onclick="creatAjax()" /> </body> </html>