代码改变世界

AJAX 中需要 获取当前URL。发现 '&'符合之后的都不再读取。用JS实现

  沐海  阅读(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;
}
}

var url = "http://127.0.0.1/e/action/ShowInfo.php?classid=9&id=2";//定义变量
function parse_url(_url){ //定义函数
 var pattern = /(\w+)=(\w+)/ig;//定义正则表达式
 var parames = {};//定义数组
 url.replace(pattern, function(a, b, c){
  parames[b] = c;
 });
 /*这是最关键的.当replace匹配到classid=9时.那么就用执行function(a,b,c);其中a的值为:classid=9,b的值为classid,c的值为9;(这是反向引用.因为在定义正则表达式的时候有两个子匹配.)
  然后将数组的key为classid的值赋为9;然后完成.
 再继续匹配到id=2;此时执行function(a,b,c);其中a的值为:id=2,b的值为id,c的值为2;然后将数组的key为id的值赋为2.
 */
 return parames;//返回这个数组.
}
var parames = parse_url(url);
alert(parames['classid'] + ", " + parames['id']);//最后打印.根据key值来打印数组对应的值
编辑推荐:
· 如何编写易于单元测试的代码
· 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的设计模式综述
记录生活、工作、学习点滴!
E-Mail:mahaisong@hotmail.com 欢迎大家讨论。
沐海博客园,我有一颗,卓越的心!
点击右上角即可分享
微信分享提示