一个简单的AJAX类

本文介绍了一个简单的Ajax类实现,包括发送请求、处理响应等核心功能。通过示例展示了如何使用该类进行POST请求,并处理返回的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


<!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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值