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


    我遇到的问题:

       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;
    }
    }

    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值来打印数组对应的值
  • 相关阅读:
    分形之城
    【SDOI2011 第2轮 DAY1】消防 树上问题+二分+贪心
    【Usaco Nov08 Gold】玩具 三分+贪心
    分治 复习
    快读板子
    最小线段覆盖 C神奇项链
    比赛经验积累1
    字符串 专题
    界面小项目之W3C
    前端小基础
  • 原文地址:https://www.cnblogs.com/mahaisong/p/2067111.html
Copyright © 2020-2023  润新知