我遇到的问题:
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上:
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后台写法
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;
}
}