// Ajax Engine
// Code By Dark Angel
// UTF-8
// 2010-8-6//-------------------------------------------------
// USAGE
// var Ajax = new iAjax(); //创建引擎实例
// Ajax.init(); //初始化引擎
// Ajax.funcAjax(func1,'GET','test.php',''); //使用Ajax的方式发送信息
// Ajax.intAjaxErrCode //错误代号
// Ajax.strAjaxErrMsg //错误描述
//-------------------------------------------------function iAjax()
{
this.intAjaxErrCode = 0; //错误代号
this.strAjaxErrMsg = ''; //错误描述
var blAjaxOK = false; //-------------------------------------------------
// 功能:创建Ajax-XMLHTTPRequest对象
// 参数:无
// 返回:XMLHTTPRequest对象
//-------------------------------------------------
funcAjaxXHR = function ()
{
try
{
var objXHR = null;
if(window.XMLHttpRequest) // Mozilla, Safari,...
{
var objXHR = new XMLHttpRequest();
if (objXHR.overrideMimeType) //有些版本的Mozilla在处理返回的未包含XML mime-type头部信息内容时会出错
{
objXHR.overrideMimeType('text/xml');
}
}
else if(window.ActiveXObject) // IE
{
try
{
var objXHR = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
try
{
var objXHR = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
//alert('抱歉,您的浏览器不支持Ajax引擎!');
}
}
} if (!objXHR || typeof(objXHR) =='undefined')
{
//alert('不能创建XMLHTTPRequest对象!');
this.intAjaxErrCode = 1;
return null;
} return objXHR;
}
catch(e)
{
this.intAjaxErrCode = 4;
this.strAjaxErrMsg = e;
return null;
}
} //objAjaxXHR = funcAjaxXHR(); //全局的XMLHTTPRequest对象 //不喜欢初始化的同学,请将下面的初始化函数注释掉,然后把这句话的注释去掉就可以了,这样每次使用引擎就不用 "实例.init(); ……"这样初始化了,但也就无法让程序自动判断初始化中的错误了 //-------------------------------------------------
// 功能:初始化
// 参数:无
// 返回:true|false
//-------------------------------------------------
this.init = function ()
{
try
{
var blStatus = false;
objAjaxXHR = null;
objAjaxXHR = funcAjaxXHR(); //全局的XMLHTTPRequest对象,函数内不用var定义的变量默认是全局变量
blStatus = objAjaxXHR;
if(!blStatus) return false;
return true;
}
catch(e)
{
this.intAjaxErrCode = 4;
this.strAjaxErrMsg = e;
return false;
}
} //-------------------------------------------------
// 功能:ajax异步通信函数
// 参数:
// objXHR XMLHttpRequest对象
// funcResp 为一 javascript 函数,用于处理返回的结果
// strMethod 字符串"GET"或"POST",指定数据提交方式,注意都大写!!
// strURL 提交到哪个 URL
// strContent 提交的内容
// 返回:true|false
//-------------------------------------------------
funcAjaxFunc = function (objXHR,funcResp, strMethod, strURL, strContent)
{
try
{
if( typeof(objXHR) != 'object' || (strMethod != 'GET' && strMethod != 'POST') ) //(! objXHR || typeof(objXHR) != 'object')
{
this.intAjaxErrCode = 2;
return false;
} // 设置状态改变时将触发的事件函数
objXHR.onreadystatechange = function ()
{
// Ajax 对象状态为完成
if (objXHR.readyState == 4)
{ // 服务器返回状态为成功
if (objXHR.status == 200)
{
var strResp = null;
var strContentType = null;
// 取返回的文档类型
strContentType = objXHR.getResponseHeader('Content-Type');
if(/text\/xml/i.test(strContentType))
{ // 返回的是 XML 文档 // 取服务器进程返回的 XML 文档对象
strResp = objXHR.responseXML;
}
else
{ // 返回的是普通文本 // 取服务器进程返回的数据文本
strResp = objXHR.responseText;
} if(typeof(funcResp) == 'function')
{
funcResp(strResp); // 处理返回结果
}
else
{
alert(strResp); // 仅提示返回结果
}
strResp = null; //释放内存
//set strResp = Nothing;
blAjaxOK = true;
return;
}
else
{
this.intAjaxErrCode = 3;
return false;
}
}
} if(!strURL)
{
this.intAjaxErrCode = 2;
return false;
}
// 设置与服务器通信时的请求方式、目标URL、异步标志
objXHR.open(strMethod, strURL, true);
if(strMethod == 'POST')
{
// 设置请求头,指明发送的数据类型
objXHR.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
}
// 发送通信请求
objXHR.send(strContent);
}
catch(e)
{
this.intAjaxErrCode = 4;
this.strAjaxErrMsg = e;
return false;
}
} //-------------------------------------------------
// 功能:对ajax异步通信的调用
// 参数:
// funcResp 为一 javascript 函数,用于处理返回的结果
// method 字符串"GET"或"POST",指定数据提交方式
// url 提交到哪个 URL
// content 提交的内容
// 返回:true|false
//-------------------------------------------------
this.funcAjax = function (funcResp,strMethod,strURL,strContent)
{
try
{
funcAjaxFunc(objAjaxXHR,funcResp,strMethod,strURL,strContent);
return blAjaxOK;
}
catch(e)
{
this.intAjaxErrCode = 4;
this.strAjaxErrMsg = e;
return false;
}
} //-------------------------------------------------
// 功能:错误描述
// 参数:无
// 返回:错误描述代号和字符串
//-------------------------------------------------
this.funcErrHdl = function()
{
switch(this.intAjaxErrCode)
{
case 0 :
this.strAjaxErrMsg = '无错误';
break;
case 1 :
this.strAjaxErrMsg = '不能创建XMLHTTPRequest对象!';
break;
case 2 :
this.strAjaxErrMsg = 'XMLHTTPRequest对象创建失败或指定提交数据设置错误!';
break;
case 3 :
this.strAjaxErrMsg = '服务器消息返回错误!';
break;
case 4 :
//e
break;
default :
this.strAjaxErrMsg = '未知错误';
}
}} //-------------------------------------------------
// 错误代码 错误描述
// 0 无错误
// 1 不能创建XMLHTTPRequest对象!
// 2 XMLHTTPRequest对象创建失败或指定提交数据设置错误!
// 3 服务器消息返回错误!
// 4 未知错误
//-------------------------------------------------我本想在程序里通过判断Ajax.funcAjax()的返回值或Ajax.intAjaxErrCode错误代号是否为0来判断此次AJAX是否成功
但由于AJAX是异步,所以状态还没来得及改变,程序就已经执行完成返回了,我不想再程序里直接使用ALERT()来提醒用户出错,因为为了美化错误界面,所以希望她只返回错误信息,然后手工获取,请问要怎样修改,才能添加一个手工判断的标志呢?
// Code By Dark Angel
// UTF-8
// 2010-8-6//-------------------------------------------------
// USAGE
// var Ajax = new iAjax(); //创建引擎实例
// Ajax.init(); //初始化引擎
// Ajax.funcAjax(func1,'GET','test.php',''); //使用Ajax的方式发送信息
// Ajax.intAjaxErrCode //错误代号
// Ajax.strAjaxErrMsg //错误描述
//-------------------------------------------------function iAjax()
{
this.intAjaxErrCode = 0; //错误代号
this.strAjaxErrMsg = ''; //错误描述
var blAjaxOK = false; //-------------------------------------------------
// 功能:创建Ajax-XMLHTTPRequest对象
// 参数:无
// 返回:XMLHTTPRequest对象
//-------------------------------------------------
funcAjaxXHR = function ()
{
try
{
var objXHR = null;
if(window.XMLHttpRequest) // Mozilla, Safari,...
{
var objXHR = new XMLHttpRequest();
if (objXHR.overrideMimeType) //有些版本的Mozilla在处理返回的未包含XML mime-type头部信息内容时会出错
{
objXHR.overrideMimeType('text/xml');
}
}
else if(window.ActiveXObject) // IE
{
try
{
var objXHR = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
try
{
var objXHR = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
//alert('抱歉,您的浏览器不支持Ajax引擎!');
}
}
} if (!objXHR || typeof(objXHR) =='undefined')
{
//alert('不能创建XMLHTTPRequest对象!');
this.intAjaxErrCode = 1;
return null;
} return objXHR;
}
catch(e)
{
this.intAjaxErrCode = 4;
this.strAjaxErrMsg = e;
return null;
}
} //objAjaxXHR = funcAjaxXHR(); //全局的XMLHTTPRequest对象 //不喜欢初始化的同学,请将下面的初始化函数注释掉,然后把这句话的注释去掉就可以了,这样每次使用引擎就不用 "实例.init(); ……"这样初始化了,但也就无法让程序自动判断初始化中的错误了 //-------------------------------------------------
// 功能:初始化
// 参数:无
// 返回:true|false
//-------------------------------------------------
this.init = function ()
{
try
{
var blStatus = false;
objAjaxXHR = null;
objAjaxXHR = funcAjaxXHR(); //全局的XMLHTTPRequest对象,函数内不用var定义的变量默认是全局变量
blStatus = objAjaxXHR;
if(!blStatus) return false;
return true;
}
catch(e)
{
this.intAjaxErrCode = 4;
this.strAjaxErrMsg = e;
return false;
}
} //-------------------------------------------------
// 功能:ajax异步通信函数
// 参数:
// objXHR XMLHttpRequest对象
// funcResp 为一 javascript 函数,用于处理返回的结果
// strMethod 字符串"GET"或"POST",指定数据提交方式,注意都大写!!
// strURL 提交到哪个 URL
// strContent 提交的内容
// 返回:true|false
//-------------------------------------------------
funcAjaxFunc = function (objXHR,funcResp, strMethod, strURL, strContent)
{
try
{
if( typeof(objXHR) != 'object' || (strMethod != 'GET' && strMethod != 'POST') ) //(! objXHR || typeof(objXHR) != 'object')
{
this.intAjaxErrCode = 2;
return false;
} // 设置状态改变时将触发的事件函数
objXHR.onreadystatechange = function ()
{
// Ajax 对象状态为完成
if (objXHR.readyState == 4)
{ // 服务器返回状态为成功
if (objXHR.status == 200)
{
var strResp = null;
var strContentType = null;
// 取返回的文档类型
strContentType = objXHR.getResponseHeader('Content-Type');
if(/text\/xml/i.test(strContentType))
{ // 返回的是 XML 文档 // 取服务器进程返回的 XML 文档对象
strResp = objXHR.responseXML;
}
else
{ // 返回的是普通文本 // 取服务器进程返回的数据文本
strResp = objXHR.responseText;
} if(typeof(funcResp) == 'function')
{
funcResp(strResp); // 处理返回结果
}
else
{
alert(strResp); // 仅提示返回结果
}
strResp = null; //释放内存
//set strResp = Nothing;
blAjaxOK = true;
return;
}
else
{
this.intAjaxErrCode = 3;
return false;
}
}
} if(!strURL)
{
this.intAjaxErrCode = 2;
return false;
}
// 设置与服务器通信时的请求方式、目标URL、异步标志
objXHR.open(strMethod, strURL, true);
if(strMethod == 'POST')
{
// 设置请求头,指明发送的数据类型
objXHR.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
}
// 发送通信请求
objXHR.send(strContent);
}
catch(e)
{
this.intAjaxErrCode = 4;
this.strAjaxErrMsg = e;
return false;
}
} //-------------------------------------------------
// 功能:对ajax异步通信的调用
// 参数:
// funcResp 为一 javascript 函数,用于处理返回的结果
// method 字符串"GET"或"POST",指定数据提交方式
// url 提交到哪个 URL
// content 提交的内容
// 返回:true|false
//-------------------------------------------------
this.funcAjax = function (funcResp,strMethod,strURL,strContent)
{
try
{
funcAjaxFunc(objAjaxXHR,funcResp,strMethod,strURL,strContent);
return blAjaxOK;
}
catch(e)
{
this.intAjaxErrCode = 4;
this.strAjaxErrMsg = e;
return false;
}
} //-------------------------------------------------
// 功能:错误描述
// 参数:无
// 返回:错误描述代号和字符串
//-------------------------------------------------
this.funcErrHdl = function()
{
switch(this.intAjaxErrCode)
{
case 0 :
this.strAjaxErrMsg = '无错误';
break;
case 1 :
this.strAjaxErrMsg = '不能创建XMLHTTPRequest对象!';
break;
case 2 :
this.strAjaxErrMsg = 'XMLHTTPRequest对象创建失败或指定提交数据设置错误!';
break;
case 3 :
this.strAjaxErrMsg = '服务器消息返回错误!';
break;
case 4 :
//e
break;
default :
this.strAjaxErrMsg = '未知错误';
}
}} //-------------------------------------------------
// 错误代码 错误描述
// 0 无错误
// 1 不能创建XMLHTTPRequest对象!
// 2 XMLHTTPRequest对象创建失败或指定提交数据设置错误!
// 3 服务器消息返回错误!
// 4 未知错误
//-------------------------------------------------我本想在程序里通过判断Ajax.funcAjax()的返回值或Ajax.intAjaxErrCode错误代号是否为0来判断此次AJAX是否成功
但由于AJAX是异步,所以状态还没来得及改变,程序就已经执行完成返回了,我不想再程序里直接使用ALERT()来提醒用户出错,因为为了美化错误界面,所以希望她只返回错误信息,然后手工获取,请问要怎样修改,才能添加一个手工判断的标志呢?
解决方案 »
- 贵求各高手菜单延时显示代码
- 点击aa,数字加一,点击bb,数字减一
- 请问正则表达式中的“\”都有什么意思呢?
- window.open 的问题,大家帮我们看看啊
- 介绍本好的学习javascript的书,不要太深奥,谢谢!
- javaScript 读取xml资源文件实现国际化的问题
- about isNaN(parseFloat(str1))
- 初学,指点指点。
- 合同要求实现套打,江湖救急啊
- 以下简单的VB查询数据库的代码如何改成可以供其他HTML页面JS调用的代码呢?在线给分!急!
- javaScript在ie6中不能实现请高手帮忙看看
- 这段Jquery代码错在哪?Firefox老提示说找不到span0s[i].text("0");函数
// var Ajax = new iAjax(); //创建引擎实例
// var r_msg=Ajax.getErrMsg(); //使用方法
this.getErrMsg=function(){
return this.strAjaxErrMsg;
}
更具他的方法把直接调用类内的属性或成了调用类的方法,更显专业~~
另外谢谢HACKFAN老大的线下支持,让我了解到如何能获取正确的错误返回信息