欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Ajax异步(请求)提交类 支持跨域

程序员文章站 2022-06-24 16:18:15
复制代码 代码如下:/**//* 异步请求类 作者:吾非无心 创建时间:2009.2 -------------------------------------------...
复制代码 代码如下:

/**//*
异步请求类

作者:吾非无心
创建时间:2009.2
---------------------------------------------------------------------------------------------------------------------------------

修改记录:

2009.4.27——添加 url 检测功能,如果是“http://xxxx.xxx.xx.xx/..”这样的格式,使用系统提供的“/geturl.aspx”进行获取
以解决跨域问题。
geturl.aspx 的主要参数有两个:1、url 值为目标url(url中可以带参数)——必须;2、method 值为代理使用的方法(可选)
如果method为空,默认采用post方法进行代理;如果form参数为空(即request.content-length=0),则自动设置为get方法;
(注:geturl.aspx在2009.4.27重新进行了设计,在原完成代理的基础上,新增了cookie代理)
*/
function isouterurl(str_url){
var strregex = "((https|http)://)([\\w-]+\\.)+[\\w-]+.([^a-z])(/[\\w-./?%&=]*)?|((https|http)://)[a-za-z0-9\\-\\.][\\w-]+.([^a-z])(/[\\w-./?%&=]*)?";
var re=new regexp(strregex);

if (re.test(str_url)){
return (true);
}else{
return (false);
}
}
var leesajaxrequest=
{
list:[],
m_leesajaxhttprequest:null,
isworking:false,
geturl:function(method,url,params,successfun,failurefun,headers)
{
if(url.length<1)
return;
if(this.m_leesajaxhttprequest==null)
{
if (typeof xmlhttprequest != 'undefined')
{
this.m_leesajaxhttprequest = new xmlhttprequest();
}
else if (typeof activexobject != 'undefined')
{
this.m_leesajaxhttprequest = new activexobject('microsoft.xmlhttp');
}

}
if (this.m_leesajaxhttprequest)
{
if(this.isworking)
{
this.list[this.list.length]={method:method,url:url,params:params,successfun:successfun,failurefun:failurefun,headers:headers};
}
else
{
this.isworking=true;
if(isouterurl(url))
this.m_leesajaxhttprequest.open(method, "/geturl.aspx?url="+escape(url)+"&method="+method, true);//true为异步
else
this.m_leesajaxhttprequest.open(method, url, true);//true为异步
var _this=this;
this.m_leesajaxhttprequest.onreadystatechange=function()
{
if(4==_this.m_leesajaxhttprequest.readystate)
{
if(200==_this.m_leesajaxhttprequest.status)
{
if(successfun)
{
try{
successfun(_this.m_leesajaxhttprequest);
}
catch(ex)
{}
}
}
else
{
if(failurefun)
{
try{
failurefun(_this.m_leesajaxhttprequest);
}
catch(ex)
{}
}
}
_this.isworking=false;
if(_this.list.length>0)
{
var o=_this.list[0];
_this.list.splice(0,1);
_this.geturl(o.method,o.url,o.params,o.successfun,o.failurefun,o.headers);
}
}
};
var vpara="";
if(typeof params=="string")
{
vpara=escape(params);
}
else if(params)
{
try
{
for(var e in params)
{
if(vpara.length<1)
vpara=e+"="+escape(params[e]);
else
vpara+="&"+e+"="+escape(params[e]);
}
}
catch(ex)
{}
}
if(headers)
{
try
{
for(var h in headers)
{
this.m_leesajaxhttprequest.setrequestheader(h.replace("_","-"),headers[h]);
}
}
catch(ex)
{
}
}
this.m_leesajaxhttprequest.send(vpara);
}
}
},
post:function(o)
{
var vmethod=o.method||"post";
var vurl=o.url||null;
var vparams=o.params||"";
var vsuccess=o.success||null;
var vfailure=o.failure||null;
var vheaders=o.headers||null;
if(vurl==null||vurl.length<1)
{
//alert("异步请求格式错误");
return;
}
this.geturl(vmethod,vurl,vparams,vsuccess,vfailure,vheaders);
},
get:function(o)
{
var vmethod=o.method||"get";
var vurl=o.url||null;
var vparams=o.params||"";
var vsuccess=o.success||null;
var vfailure=o.failure||null;
var vheaders=o.headers||null;
if(vurl==null||vurl.length<1)
{
//alert("异步请求格式错误");
return;
}
this.geturl(vmethod,vurl,vparams,vsuccess,vfailure,vheaders);
}
}
/**//*异步请求类 end*/


使用示例:
复制代码 代码如下:

1.//动态装载js文件
if(vjs && vjs.length>3)
{
if(!_this.loadedjs.isinarray(vjs))
{
_this.loadedjs[_this.loadedjs.length]=vjs;
leesajaxrequest.get({
url:vjs,
success:function(ojs){
var jsobj=document.createelement("script");
jsobj.text=ojs.responsetext;
document.documentelement.appendchild(jsobj);
},//end success
headers:{content_type:"application/x-javascript"}
});//end get
}//end if ( !_this.loadedjs.isinarray(vjs))
}//end if(vjs && vjs.length>3)

2 .//添加到工具提示竖条上
leesajaxrequest.post({url:"/gettooltip.aspx",
params:{tooltip:title},
headers:{content_type:"application/x-www-form-urlencoded;charset=utf-8"},//如果使用post方法,必须传入此参数,charset可以为别的
success:function(o){
var robj=eval("("+o.responsetext+")");
var tobj=new leesbasewindow(robj["width"]+2,robj["height"]+1,"","","","","",1,"");
tobj.showwindow(vtoolbarslider.window);
tobj.contentwindow.style.backgroundimage="url("+robj["image"]+")";
tobj.contentwindow.style.marginleft="1px";
tobj.contentwindow.style.backgroundrepeat="no-repeat";
tobj.contentwindow.style.backgroundposition="0 0";
tobj.contentwindow.onmouseover=function(){
this.style.backgroundposition="0 -"+robj.height;
_this.setshowwindow(obj);
}
tobj.contentwindow.onmouseout=function(){
this.style.backgroundposition="0 0";
}
},
failure:function(){
alert("生成tooltip时出错");
}
});