52,797
社区成员
发帖
与我相关
我的任务
分享
//Class - Begin
function XmlHttp(){
this.objXmlHttp = this.CreateXmlHttpRequest();
//this.objDivReadyState = this.ShowReadyState();//创建状态输出DIV对象//依赖外部JS包(这个外部JS包是个过度特效包,各位可以不用,直接修改输出对象的style.display就行了)
}
//引用原型
XmlHttp.prototype = {
//创建对象 IE7 和 Firefox 已经统一了,不过还是有IE6用户,我只注重这两个浏览器,其他浏览器建议不要使用此类,或者在此处扩展
CreateXmlHttpRequest:function(){
var objXmlHttp = null;
if(window.XMLHttpRequest){
objXmlHttp = new XMLHttpRequest();
}else if(window.ActiveXObject){
objXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}else{
throw "XmlHttp 异常!"
}
return objXmlHttp;
}
,
//URL提交
//参数:回调函数指针,URL,异步/同步,服务器帐号,服务器密码 (支持匿名访问的可以直接省略帐号密码参数,JavaScript就是爽,呵呵)
DoGet: function( objMethod, url, async, username, password ){
this.objXmlHttp.onreadystatechange = this.ClosureExecuteMethod( objMethod );
this.objXmlHttp.open( "GET", this.URLAddTimestamp(url), async, username, password );
this.objXmlHttp.setRequestHeader("If-Modified-Since","0");//避免缓存
this.objXmlHttp.send( null );
}
,
//Form提交
//参数:回调函数指针,URL,表单对象,异步/同步,服务器帐号,服务器密码 (支持匿名访问的可以直接省略帐号密码参数)
DoPostForm:function( objMethod, url, objForm, async, username, password ){
this.objXmlHttp.onreadystatechange = this.ClosureExecuteMethod( objMethod );
this.objXmlHttp.open( "POST", this.URLAddTimestamp(url), async, username, password );
this.objXmlHttp.setRequestHeader("If-Modified-Since","0");//避免缓存
this.objXmlHttp.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded" );//application/x-www-form-urlencoded 表示提交表单
this.objXmlHttp.send( this.TraversalForm(objForm) );
}
,
//状态事件执行回调函数的闭包
ClosureExecuteMethod:function( objMethod ){
var obj = this;
return function(){
obj.ExecuteMethod( objMethod );
}
}
,
//通过状态码执行回调函数
ExecuteMethod:function( objMethod ){
if( this.objXmlHttp.readyState == 4 ){
if ( this.objXmlHttp.status == 200 ) {
//this.ShowReadyState("OK");//依赖外部JS包
if( objMethod != null ){
objMethod( this.objXmlHttp.responseText )
}
}else{
//this.ShowReadyState("ERROR");//依赖外部JS包
}
}
}
,
//给URL添加时间标签,用正则表达式验证是否有参数,所以前台不用考虑是?号或&号,该意图主要是避免缓存
URLAddTimestamp:function(url){
if( (/\?.{1,}\=.{1,}/).test(url) ){
url = url + "×tamp=" + new Date().getTime();
}else{
url = url + "?Timestamp=" + new Date().getTime();
}
return url;
}
,
//遍历表单对象,组合body体(GET提交和FORM提交其实都是明文提交,可以参考HTTP请求与返回的模型)
TraversalForm:function( objForm ){
var params = null;
for( var i=0; i<objForm.length; i++ ){
if( objForm[i].type.toLowerCase()!="radio" || (objForm[i].type.toLowerCase()=="radio" && objForm[i].checked) ){
if( params==null ){
params = objForm[i].name + "=" + encodeURIComponent(objForm[i].value);
}else{
params = params + "&" + objForm[i].name + "=" + encodeURIComponent(objForm[i].value);
}
}
}
return params;
}
,
//状态输出,这个不用的情况下,在前面的方法体内注释掉就行,或者用全局变量开关来控制。
ShowReadyState:function(){
var obj = this;
switch( arguments[0] ){
case "OK":
this.objDivReadyState.innerHTML = "<div style=\"color:blue;\">数据交互完<div>";
setTimeout( function(){new DisplayGradualness( obj.objDivReadyState );} , 1000 );//依赖外部JS包
setTimeout( function(){window.document.body.removeChild(obj.objDivReadyState);} , 3000 );
break;
case "ERROR":
this.objDivReadyState.innerHTML = "<div style=\"color:red;\">交互已失败<div>";
setTimeout( function(){new DisplayGradualness( obj.objDivReadyState );} , 1000 );//依赖外部JS包
setTimeout( function(){window.document.body.removeChild(obj.objDivReadyState);} , 3000 );
break;
default:
var divReadyState = window.document.createElement("div");
divReadyState.style.position = "absolute";
divReadyState.style.filter = "Alpha(Opacity=100)";
divReadyState.style.top = "5px";
divReadyState.style.right = "5px";
divReadyState.style.border = "solid";
divReadyState.style.borderColor = "#808080";
divReadyState.style.borderWidth = "1px";
divReadyState.style.backgroundColor = "#FFFFCC";
divReadyState.style.fontSize = "12px";
divReadyState.style.padding = "3px";
divReadyState.style.display = "none";
divReadyState.innerHTML = "<div style=\"color:green;\">数据交互中<div>";
window.document.body.appendChild( divReadyState );
new DisplayGradualness( divReadyState );//依赖外部JS包
return divReadyState;
break;
}
}
}
//Class - End
function haha() {
try{
new XmlHttp().DoGet(myHandler,"test",true); //我不明白你的test字符串是啥意思,这里DoGet的是一个URL才对。
}catch(e){
alert(e);
}
}