收集一些ajax类(希望对大家有用处)
本人在网站看见好多ajax的类所以我就把收集起来,给大家多一些选择,希望给大家带来帮助
第一个ajax类
在给blog加上无刷新搜索和即时验证检测后,又看了下代码,感觉太过麻烦,就把XMLHttpRequest请求封装到一个类里面,用起来方便多了,不用记那么多代码,什么创建XMLHttpRequest对象什么的,这部分代码也是重用性比较高的~已经打包,在日志的末尾下载。
要看效果的话点开侧边栏里的日志搜索,里面有一个无刷新搜索,就是了,或者在阅读日志或留言簿里的注册码那里有即时检测,如果不输入验证码或者输错了验证码,输入框都会变红的'
类名:AJAXRequest
创建方法:var ajaxobj=new AJAXRequest;,如果创建失败则返回false
属性:method - 请求方法,字符串,POST或者GET,默认为POST
url - 请求URL,字符串,默认为空
async - 是否异步,true为异步,false为同步,默认为true
content - 请求的内容,如果请求方法为POST需要设定此属性,默认为空
callback - 回调函数,即返回响应内容时调用的函数,默认为直接返回,回调函数有一个参数为XMLHttpRequest对象,即定义回调函数时要这样:function mycallback(xmlobj)
方法:send - 发送请求,无参数
一个例子:
[复制此代码]CODE:
<script type="text/javascript" src="ajaxrequest.js"></script>
<script type="text/javascript">
var ajaxobj=new AJAXRequest; // 创建AJAX对象
ajaxobj.method="GET"; // 设置请求方式为GET
ajaxobj.url="default.asp" // URL为default.asp
// 设置回调函数,输出响应内容
ajaxobj.callback=function(xmlobj) {
document.write(xmlobj.responseText);
}
ajaxobj.send(); // 发送请求
[复制此代码]CODE:
// AJAX类
function AJAXRequest() {
var xmlObj = false;
var CBfunc,ObjSelf;
ObjSelf=this;
try { xmlObj=new XMLHttpRequest; }
catch(e) {
try { xmlObj=new ActiveXObject("MSXML2.XMLHTTP"); }
catch(e2) {
try { xmlObj=new ActiveXObject("Microsoft.XMLHTTP"); }
catch(e3) { xmlObj=false; }
}
}
if (!xmlObj) return false;
this.method="POST";
this.url;
this.async=true;
this.content="";
this.callback=function(cbobj) {return;}
this.send=function() {
if(!this.method||!this.url||!this.async) return false;
xmlObj.open (this.method, this.url, this.async);
if(this.method=="POST") xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlObj.onreadystatechange=function() {
if(xmlObj.readyState==4) {
if(xmlObj.status==200) {
ObjSelf.callback(xmlObj);
}
}
}
if(this.method=="POST") xmlObj.send(this.content);
else xmlObj.send(null);
}
}
第二个ajax类
程序代码:
<script type="text/javascript">
function Ajax(sUrl,sRecvTyp,sQueryString,oResultFunc) {
this.Url = sUrl;
this.QueryString = sQueryString;
this.XmlHttp = this.createXMLHttpRequest();
if (this.XmlHttp == null) {
alert("erro");
return;
}
var objxml = this.XmlHttp;
objxml.onreadystatechange = function (){Ajax.handleStateChange(objxml,sRecvTyp,oResultFunc)};
}
Ajax.prototype.createXMLHttpRequest = function() {
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
try { return new XMLHttpRequest(); } catch(e) {}
return null;
}
Ajax.prototype.createQueryString = function () {
var queryString = this.QueryString;
return queryString;
}
Ajax.prototype.get = function () {
sUrl = this.Url;
var queryString = sUrl+"?timeStamp=" + new Date().getTime() + "&" + this.createQueryString();
this.XmlHttp.open("GET",queryString,true);
this.XmlHttp.send(null);
}
Ajax.prototype.post = function() {
sUrl = this.Url;
var sUrl = sUrl + "?timeStamp=" + new Date().getTime();
var queryString = this.createQueryString();
this.XmlHttp.open("POST",sUrl,true);
this.XmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
this.XmlHttp.send(queryString);
}
Ajax.handleStateChange = function (XmlHttp,sRecvTyp,oResultFunc) {
if (XmlHttp.readyState == 4) {
if (XmlHttp.status == 200) {
oResultFunc(sRecvTyp?XmlHttp.responseXML:XmlHttp.responseText);
} else {
alert("您所请求的页面有异常。");
}
}
}
</script>
使用方法:
<script type="text/javascript">
var classAjax = new Ajax(sUrl,sRecvTyp,sQueryString,oResultFunc);
classAjax.post();//post方式发送数据
classAjax.get();//get方式发送数据
//sUrl发送地址
//sRecvTyp 接受数据类型:0为xml 1为text
//oResultFunc 返回结果处理函数
</script>
应用实例:
<script type="text/javascript">
var ajax1 = new Ajax("1.asp",0,"id="+id,bacal);
ajax1.post();
function bacal(rexm){
//返回数据处理函数;
}
</script>
第三个ajax类
YunAjax.js:
/// <summary>
/// 调用ajax,返回服务器端的原始数据
/// </summary>
/// <param name="url">远程调用路径</param>
/// <param name="pars">附加到路径的url参数</param>
/// <param name="method">请求方式,get或post</param>
/// <param name="onComplete">此变量是一个函数,数据请求成功后要调用的函数</param>
/// <param name="asynchronous">是否异步调用,true和false</param>
function YunAjax(url,pars,method,onComplete,asynchronous)
{
var xmlHttp;
if(window.ActiveXObject)
{
try
{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else if(window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
xmlHttp.onreadystatechange = function()
{
if(xmlHttp.readyState == 4)
{
onComplete(xmlHttp);
}
}
//默认用get提交
if(method.toLowerCase() == "get")
{
url = url+"?"+pars;
xmlHttp.open("GET",url,asynchronous);
xmlHttp.send(null);
}
else
{
xmlHttp.open("POST",url,asynchronous);
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send(pars);
}
}
第四个ajax类
//AJAX类
function AjaxClass()
{
var XmlHttp = false;
try
{
XmlHttp = new XMLHttpRequest(); //FireFox专有
}
catch(e)
{
try
{
XmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e2)
{
try
{
XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e3)
{
alert("你的浏览器不支持XMLHTTP对象,请升级到IE6以上版本!");
XmlHttp = false;
}
}
}
var me = this;
this.Method = "POST";
this.Url = "";
this.Async = true;
this.Arg = "";
this.CallBack = function(){};
this.Send = function()
{
if (this.Url=="")
{
return false;
}
if (!XmlHttp)
{
return IframePost();
}
XmlHttp.open (this.Method, this.Url, this.Async);
if (this.Method=="POST")
{
XmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}
XmlHttp.onreadystatechange = function()
{
if (XmlHttp.readyState==4)
{
var Result = false;
if (XmlHttp.status==200)
{
var rec = new ActiveXObject("ADODB.RecordSet");
rec.Fields.Append("DDD",201,1);
rec.open();
rec.addNew();
rec(0).appendChunk(XmlHttp.responseBody);
rec.update();
Result = rec(0).value;
rec.Close();
rec = null;
}
XmlHttp = null;
me.CallBack(Result);
}
}
if (this.Method=="POST")
{
XmlHttp.send(this.Arg);
}
else
{
XmlHttp.send(null);
}
}
//Iframe方式提交
function IframePost()
{
var Num = 0;
var obj = document.createElement("iframe");
obj.attachEvent("onload",function(){ me.CallBack(obj.contentWindow.document.body.innerHTML); obj.removeNode() });
obj.attachEvent("onreadystatechange",function(){ if (Num>=5) {alert(false);obj.removeNode()} });
obj.src = me.Url;
obj.style.display = 'none';
document.body.appendChild(obj);
}
}
/*----------, , ------------------调用方法------------------------------
var Ajax = new AjaxClass(); // 创建AJAX对象
Ajax.Method = "POST"; // 设置请求方式为POST
Ajax.Url = "default.asp" // URL为default.asp
Ajax.Async = true; // 是否异步
Ajax.Arg = "abc"; // POST的参数
Ajax.CallBack = function(str) // 回调函数
{
document.write(str);
}
Ajax.Send(); // 发送请求
--------------------------------------------------------------------*/
第五个ajax类
ajax.js
/**
* 取得当前页面的url
* 可以在调用ajax_query前修改
**/
var url = location.href.substr(0, location.href.length-location.search.length);
/**
* 给Function对象添加一个取得函数名的方法
**/
Function.prototype.Name = function() {
var s = Function.prototype.Name.caller.toString();
return s.split(/[/r/n]+/)[0].replace(/function/s+(/w+).+/g, '$1');
}
/**
* 函数 $
* 功能 获取dhtml对象
* 参数 e 待查找的对象id或name
* 返回 成功:对象 失败:null
*/
function $(e) {
var tag = document.getElementById(e);
if(tag) return tag;
tag = document.getElementsByName(e);
if(tag.tagName == undefined) return null;
return tag;
}
/**
* 建立并返回XMLHTTP对象
* 说明 虽然Msxml2.XMLHTTP有着比Microsoft.XMLHTTP更优秀的性能,但是在配置较低的
* 环境下并不能正常工作。当确认能够正常工作时,再删去注释
**/
function create_http() {
if (window.XMLHttpRequest) return(new XMLHttpRequest());
var arr_t = new Array(
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP.2.6",
// "MSXML2.XMLHTTP",
"Microsoft.XMLHTTP",
"MSXML.XMLHTTP"
);
for(var i=0; i<arr_t.length; i++) {
try {
xmlhttp_ver = arr_t[i];
return new ActiveXObject(arr_t[i]);
}catch(e) {}
}
return(null);
}
/**
* 函数 ajax_query
* 功能 向服务器发送指令,并处理返回数据
* 参数
* method 服务器端方法名
* tag 接受返回数据的dhml对象名,缺省时由服务器决定处理方式
* 其他 向服务器端传递的其他参数,可缺省
**/
function ajax_query(method, tag) {
/**
* 尝试创建XMLHTTP对象
**/
var xmlhttp;
xmlhttp = create_http();
if(! xmlhttp) {
alert('错误! 缺少连接组件');
return;
}
if(arguments.length == 0) {
alert(Function.Name()+'至少需要一个方法名');
return;
}
var data = 'ajax=' + method;
var i = 1;
if(tag && $(tag)) {
data = data + '&ajaxtag=' + tag;
i++;
}
/**
* 构造参数串
* 使用了encodeURIComponent函数对参数串进行编码
* 说明
* encodeURIComponent函数是将传入的参数转换成utf-8编码以后再做URL编码,可以在
* 服务器端自动完成URL解码。注意URL解码后的是utf-8编码的串,需要自行完成到
* 所需编码的转换
* escape函数是将传入的参数转换成unicode编码以后再做URL编码,在服务器端一般不
* 能全部完成URL解码。参数中的汉字将以%uhhhh的形式出现,处理上稍嫌麻烦
**/
for(; i < arguments.length; i++) {
data = data + '&ajaxargs[]=' + encodeURIComponent(arguments[i]);
}
/**
* 根据参数串的长度确定传输方式
**/
var url0 = '';
var method, post_data;
if(data.length >= 2048) {
method = 'POST';
url0 = url;
post_data = data;
}else {
method = "GET";
url0 = url + '?' + data;
post_data = '';
}
/**
* 建立到服务器的连接
**/
xmlhttp.open(method, url0, true);
/**
* 如果是POST传输方式则设置HTTP头信息
**/
if (method == "POST") {
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
}
/**
* 设置异步模式回调函数
**/
xmlhttp.onreadystatechange = function() {
if (!(xmlhttp.readyState == 4 && xmlhttp.status == 200)) {
return;
}
var xml = xmlhttp.responseXML;
if(xml.xml == '') {
alert(xmlhttp.responseText);
return;
}
xml = xml.documentElement;
for(var i=0; i<xml.childNodes.length; i++) {
var tag = '';
var data = '';
/**
* 只处理XML文档中的action节点
**/
if(xml.childNodes[i].nodeName == 'action') {
/**
* 如果节点有属性,则取属性值
* 约定:无论节点有多少属性和是什么名字只认定第一个属性为需要的
* 这个属性值将作为赋值操作的DHTML对象名
**/
if(xml.childNodes[i].attributes.length > 0) {
tag = xml.childNodes[i].attributes[0].value;
}
if(xml.childNodes[i].childNodes.length > 1) {
/**
* Firefox需要这样取得CDATA的内容
**/
for(var j=0; j<xml.childNodes[i].childNodes.length; j++) {
if (xml.childNodes[i].childNodes[j].firstChild) {
data = xml.childNodes[i].childNodes[j].firstChild.data;
}
}
}else if(xml.childNodes[i].firstChild) {
/**
* 取得节点的内容
**/
data = xml.childNodes[i].firstChild.nodeValue;
}
if(tag != '') {
/**
* 判断目标对象的种类,并用相应的方式对其赋值
**/
if(! (tag = $(tag))) return;
switch(tag.nodeName) {
case 'INPUT':
case 'TEATAREA':
tag.value = data;
break;
default:
tag.innerHTML = data;
}
}else {
/**
* 执行规定的动作,data必须是合法的javascript语句
**/
try {
eval(data);
}catch(e) {}
}
}
}
}
/**
* 发送数据
**/
xmlhttp.send(post_data);
delete xmlhttp;
}