functionrequest(paras){//获取url的参数值,不区分大小写,如无此参数,返回空字符串.
varurl=location.href;
varparaString=url.substring(url.indexOf("?")+1,url.length).split("&");
varparaObj={}
for(i=0;j=paraString[i];i++){
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()]=j.substring(j.indexOf("=")+1,j.length);
}
varreturnValue=paraObj[paras.toLowerCase()];
if(typeof(returnValue)=="undefined"){
return"";
}else{
returnreturnValue;
}
}
functionredirect(){//第一个参数是当前url,如http://localhost/demo.asp?xxx=zzz,第二个及以后的参数形式必须为xxx=yyy,mm=bbbbb最终跳转url为http://localhost/demo.asp?xxx=yyy&aaa=bbb
if(arguments.length==1){
location.href=arguments[0];
return;
}else{
varparaObj={};
if(arguments[0].indexOf("?")!=-1){
varcurUrlParas=arguments[0].substring(arguments[0].indexOf("?")+1,arguments[0].length).split("&");
for(i=0;j=curUrlParas[i];i++){
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()]=j.substring(j.indexOf("=")+1,j.length);
}
}
for(i=1;j=arguments[i];i++){
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()]=j.substring(j.indexOf("=")+1,j.length);
}
varnewURL="";
for(keyinparaObj){
newURL+=key+"="+paraObj[key]+"&";
}
if(arguments[0].indexOf("?")!=-1){
newURL=arguments[0].substring(0,arguments[0].indexOf("?")+1)+newURL.substring(0,newURL.length-1);
}else{
newURL=arguments[0]+"?"+newURL.substring(0,newURL.length-1);
}
location.href=newURL;
return;
}
}
第二个函数redirect如果只有一个参数时,就是简单的重定向,当有2个或以上的参数时,就能动态指定目的url,该函数可用于翻页功能,比如redirect("http://www.xxx.com/list.asp?page=1","page="+parseInt(request("page"))+1),还可用于url类型的搜索,如:redirect("http://www.xxx.com/search.asp","range="+escape($("range").value),"keyword="+escape($("keyword").value)),url的操作变得简单起来。
redirect的核心是建立一个url参数表(hashtable),函数的第二个及以后的参数都是添加到该hashtable中,最后把该表序列化为目的url。
刚发完日志,就想到可以再改进一下,增加一个参数,决定是否用新窗口打开目的url。
/*
第一个参数是当前url,如http://localhost/demo.asp?xxx=zzz,
第二个及以后的参数形式必须为xxx=yyy,mm=bbbbb
最终跳转url为http://localhost/demo.asp?xxx=yyy&aaa=bbb
*/
functionredirect(){
if(arguments.length==0){
return;
}
if(arguments.length==1){
location.href=arguments[0];
return;
}elseif(arguments.length==2){
(arguments[1]==true)?window.open(arguments[0]):location.href=arguments[0];
return;
}else{
varparaObj={};
if(arguments[0].indexOf("?")!=-1){
varcurUrlParas=arguments[0].substring(arguments[0].indexOf("?")+1,arguments[0].length).split("&");
for(i=0;j=curUrlParas[i];i++){
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()]=j.substring(j.indexOf("=")+1,j.length);
}
}
for(i=2;j=arguments[i];i++){
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()]=j.substring(j.indexOf("=")+1,j.length);
}
varnewURL="";
for(keyinparaObj){
newURL+=key+"="+paraObj[key]+"&";
}
if(arguments[0].indexOf("?")!=-1){
newURL=arguments[0].substring(0,arguments[0].indexOf("?")+1)+newURL.substring(0,newURL.length-1);
}else{
newURL=arguments[0]+"?"+newURL.substring(0,newURL.length-1);
}
arguments[1]==true?window.open(newURL):location.href=newURL;
return;
}
}
根据昨天临下班前的想法,再修改一下,把第二个参数放到最后面去。
/*
UseAge:
redirect(url,[paras_1],[paras_2],...,[paras_n],[newWin])
paras_n:url参数,形式如page=1或type=news等。
newWin:函数的最后一个参数,布尔类型,为true时,用新窗口(window.open)打开url,否则用当前窗口(location.open)打开。默认值为false。
Example:
redirect("http://www.google.com/search","q=hello","start=20",true);//将在google搜索"hello",并翻到第3页,并用新窗口打开。
redirect("http://www.xxx.com/listpage.asp","page="+parseInt(request("page"))+1);//翻页功能中的“下一页”。
*/
functionredirect(){
if(arguments.length==0){
return;
}
if(arguments.length==1){
location.href=arguments[0];
return;
}elseif(arguments.length==2&&typeof(arguments[1])=="boolean"){
(arguments[1]==true)?window.open(arguments[0]):location.href=arguments[0];
return;
}else{
varparaObj={};
if(arguments[0].indexOf("?")!=-1){
varcurUrlParas=arguments[0].substring(arguments[0].indexOf("?")+1,arguments[0].length).split("&");
for(i=0;j=curUrlParas[i];i++){
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()]=j.substring(j.indexOf("=")+1,j.length);
}
}
varj=arguments.length;
for(i=1;iif(typeof(arguments[i])=="boolean"){
break;
}
paraObj[arguments[i].substring(0,arguments[i].indexOf("=")).toLowerCase()]=arguments[i].substring(arguments[i].indexOf("=")+1,arguments[i].length);
}
varnewURL="";
for(keyinparaObj){
newURL+=key+"="+paraObj[key]+"&";
}
if(arguments[0].indexOf("?")!=-1){
newURL=arguments[0].substring(0,arguments[0].indexOf("?")+1)+newURL.substring(0,newURL.length-1);
}else{
newURL=arguments[0]+"?"+newURL.substring(0,newURL.length-1);
}
if(typeof(arguments[length-1])=="boolean"&&arguments[length-1]==true){
window.open(newURL);
}else{
location.href=newURL;
}
return;
}
}