// 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()来提醒用户出错,因为为了美化错误界面,所以希望她只返回错误信息,然后手工获取,请问要怎样修改,才能添加一个手工判断的标志呢?

解决方案 »

  1.   

    简单的再说明一下问题,如何添加代码,可以判断这次AJAX是否成功返回想要的结果,而不是直接在类中弹出对话框提示
      

  2.   

    在 var blAjaxOK = false; 后面增加一个函数获取返回错误信息,(其他不变)试看...//功能:获取错误信息
    // var Ajax = new iAjax(); //创建引擎实例
    // var r_msg=Ajax.getErrMsg();  //使用方法

    this.getErrMsg=function(){
    return this.strAjaxErrMsg;
    }

      

  3.   

    谢谢shenzhenNBA!
    更具他的方法把直接调用类内的属性或成了调用类的方法,更显专业~~
    另外谢谢HACKFAN老大的线下支持,让我了解到如何能获取正确的错误返回信息