Ajax异步(请求)提交类支持跨域
2023-06-13 09:14:11 时间
/**//*
异步请求类
作者:吾非无心
创建时间: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代理)
*/
functionIsOuterURL(str_url){
varstrRegex="((https|http)://)([\\w-]+\\.)+[\\w-]+.([^a-z])(/[\\w-./?%&=]*)?|((https|http)://)[a-zA-Z0-9\\-\\.][\\w-]+.([^a-z])(/[\\w-./?%&=]*)?";
varre=newRegExp(strRegex);
if(re.test(str_url)){
return(true);
}else{
return(false);
}
}
varLeesAjaxRequest=
{
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(typeofXMLHttpRequest!="undefined")
{
this.m_LeesAjaxHttpRequest=newXMLHttpRequest();
}
elseif(typeofActiveXObject!="undefined")
{
this.m_LeesAjaxHttpRequest=newActiveXObject("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)
{
varo=_this.list[0];
_this.list.splice(0,1);
_this.getUrl(o.method,o.url,o.params,o.successFun,o.failureFun,o.headers);
}
}
};
varvPara="";
if(typeofparams=="string")
{
vPara=escape(params);
}
elseif(params)
{
try
{
for(vareinparams)
{
if(vPara.length<1)
vPara=e+"="+escape(params[e]);
else
vPara+="&"+e+"="+escape(params[e]);
}
}
catch(ex)
{}
}
if(headers)
{
try
{
for(varhinheaders)
{
this.m_LeesAjaxHttpRequest.setRequestHeader(h.replace("_","-"),headers[h]);
}
}
catch(ex)
{
}
}
this.m_LeesAjaxHttpRequest.send(vPara);
}
}
},
Post:function(o)
{
varvMethod=o.method||"post";
varvUrl=o.url||null;
varvParams=o.params||"";
varvSuccess=o.success||null;
varvFailure=o.failure||null;
varvHeaders=o.headers||null;
if(vUrl==null||vUrl.length<1)
{
//alert("异步请求格式错误");
return;
}
this.getUrl(vMethod,vUrl,vParams,vSuccess,vFailure,vHeaders);
},
Get:function(o)
{
varvMethod=o.method||"get";
varvUrl=o.url||null;
varvParams=o.params||"";
varvSuccess=o.success||null;
varvFailure=o.failure||null;
varvHeaders=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){
varjsOBJ=document.createElement("script");
jsOBJ.text=ojs.responseText;
document.documentElement.appendChild(jsOBJ);
},//endsuccess
headers:{Content_Type:"application/x-javascript"}
});//endGet
}//endif(!_this.loadedJS.isInArray(vJS))
}//endif(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){
varrObj=eval("("+o.responseText+")");
vartObj=newLeesBaseWindow(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="00";
tObj.contentWindow.onmouseover=function(){
this.style.backgroundPosition="0-"+rObj.height;
_this.setShowWindow(obj);
}
tObj.contentWindow.onmouseout=function(){
this.style.backgroundPosition="00";
}
},
failure:function(){
alert("生成ToolTip时出错");
}
});
相关文章
- jQuery的ajax async同步和异步介绍详解编程语言
- Ajax调用MySQL给网站带来快捷体验(ajax调用mysql)
- Ajax无缝接入MySQL数据库(ajax请求mysql)
- 使用Ajax实现MySQL数据库操作(ajax操作mysql)
- 从MySQL分批传输至客户端AJAX解决方案(ajax分批mysql)
- prototype与jquery下Ajax实现的差别
- Ext.FormPanel提交和Ext.Ajax.request异步提交函数的区别
- Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
- AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
- jquery$.ajax()取xml数据的小问题解决方法
- Ajax请求中的异步与同步,需要注意的地方说明
- 设置默认Ajax操作cacheanderror
- JSP中获取ExtJS.Ajax前台传递的JSON数据实现过程
- 浅析ajax请求json数据并用js解析(示例分析)
- AJAX实现鼠标经过弹出详细介绍示例
- ajax异步回调函数中给外部变量赋值的问题探讨
- jQuery中ajax的使用与缓存问题的解决方法
- 使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
- ThinkPHP使用心得分享-ThinkPHP+Ajax实现2级联动下拉菜单
- jQuery学习笔记之Ajax操作篇(一)-数据加载
- ThinkPHP中使用ajax接收json数据的方法