AJAX 中需要 获取当前URL。发现 '&'符合之后的都不再读取。用JS实现
2011-06-01 16:18 沐海 阅读(9816) 评论(3) 编辑 收藏 举报我遇到的问题:
jQuery.ajax({
url: utilUrl,
type: 'POST',
data: "operationType=" + 2 + "&Title=" + Title + "&Address=" + window.location.href,//HTTP的不能做参数传递
dataType: 'json',
timeout: 10000,
error: function(data) { alert(data.result); },
success: function(data) {
alert(data.result);
window.location.reload();
}
});
在这时。window.location.href 是非常完整的URL。包括&号之后的数据。
可是JQUERY AJAX过去。Address = Request["Address"].ToString();
后台就没有&之后的值了。?号之后的还有。
http://localhost:1965/lK/LK.aspx?id=183&category=5
http://localhost:1965/lK/LK.aspx?id=183
原因:
&不能做为URL(参数的一部分)传递。因为会被浏览器当作分割参数的标志。 下面括号里的写法。
“http://localhost:1965/lK/LKDetail.aspx?id=(http://localhost:1965/lK/LK.aspx?id=183&category=5)&category=5”
这种?后某个参数是URL(带有参数)的方式。会被.NET服务器直接认为请求时 无效 字符串异常。
解决思路:
1.替换字符串2.把参数单个传递,然后再后台接收拼接
自己写的
JS上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | var str = window.location.href; //取得整个地址栏 var num = str.indexOf( "?" ); //问号之前的位置 var loaction=str.substr(0,num); //问号之前的URL str = str.substr(num + 1); //问号之后的URL var URLString=UrlSearch(str); //得到所有URL的参数,不包括URL var msg = "您是否要收藏" + Title + "!" ; if (confirm(msg, "添加收藏确认" , function() { jQuery.ajax({ url: utilUrl, type: 'POST' , data: "operationType=" + 2 + "&Title=" + Title + "&Address=" + loaction+ "¶meter=" +URLString, dataType: 'json' , timeout: 10000, error: function(data) { alert(data.result); }, success: function(data) { alert(data.result); window.location.reload(); } }); } function UrlSearch(str) { var UrlString= "" ; var name, value; var num; var arr = str.split( "&" ); //各个参数放到数组里 for ( var i = 0; i < arr.length; i++) { num = arr[i].indexOf( "=" ); if (num > 0) { name = arr[i].substring(0, num); value = arr[i].substr(num + 1); // this[name] = value; var tem= "(" +name+ ":" +value+ ")," ; UrlString+=tem; //拼接URL 成 "(name0=Id:value0=162),(name1=DetailTyle:value1=1),"的形式 //更进一步 "(Id:162),(DetailTyle:1),"这种形式 } } UrlString=UrlString.substr(0,UrlString.length-1); //去掉最后的一个逗号 "(Id:162),(DetailTyle:1)" return UrlString; } |
CS后台写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | String AddressURL = Request[ "Address" ].ToString()+ "?" ; String Paramter = Request[ "parameter" ].ToString(); String[] temp = Paramter.Split( ',' ); //按照逗号来切割 //temp[0]="(Id:162)" for ( int i = 0; i < temp.Length;i++ ) { String temp1= temp[i].Substring(1, temp[i].Length - 2); //Id:162 因为从0开始的。所以长度减2 String [] temp2 =temp1.Split( ':' ); AddressURL += temp2[0] + "=" + temp2[1]; if ((i + 1) < temp.Length) { AddressURL += "&" ; } } infomodel.Address = AddressURL; |
以下是得到URL。并得到对应参数的方法。没怎么看懂。
————————————————————————————————————————————————————————————————————
那么就可以用这个方法取到指定参数:
function hooyesQueryString(queryStringName)
{
var returnValue="";
var URLString=new String(document.location);
var serachLocation=-1;
var queryStringLength=queryStringName.length;
do
{
serachLocation=URLString.indexOf(queryStringName+"\=");
if (serachLocation!=-1)
{
if ((URLString.charAt(serachLocation-1)=='?') || (URLString.charAt(serachLocation-1)=='&'))
{
URLString=URLString.substr(serachLocation);
break;
}
URLString=URLString.substr(serachLocation+queryStringLength+1);
}
}
while (serachLocation!=-1)
if (serachLocation!=-1)
{
var seperatorLocation=URLString.indexOf("&");
if (seperatorLocation==-1)
{
returnValue=URLString.substr(queryStringLength+1);
}
else
{
returnValue=URLString.substring(queryStringLength+1,seperatorLocation);
}
}
return returnValue;
}
然后:
hooyesQueryString("id")就取到id参数的值
另外写了一个
<script type="text/javascript">
function UrlSearch()
{
var name,value;
var str=location.href; //取得整个地址栏
var num=str.indexOf("?")
str=str.substr(num+1); //取得所有参数
var arr=str.split("&"); //各个参数放到数组里
for(var i=0;i < arr.length;i++){
num=arr[i].indexOf("=");
if(num>0){
name=arr[i].substring(0,num);
value=arr[i].substr(num+1);
this[name]=value;
}
}
}
var Request=new UrlSearch(); //实例化
alert(Request.id);
</script>
<script language = javascript>
function request(paras){
var url = location.href;
var paraString = url.substring(url.indexOf("?")+1,url.length).split("&");
var paraObj = {}
for (i=0; j=paraString[i]; i++){
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf("=")+1,j.length);
}
var returnValue = paraObj[paras.toLowerCase()];
if(typeof(returnValue)=="undefined"){
return "";
}else{
return returnValue;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述