问题一:实现获取Url路径后面的参数(应用场景在:在当前页面,修改路径后面参数的参数值,获得同一个页面的下一组数据)

本文介绍了三种从URL中获取参数的方法:使用split简化处理、利用正则表达式处理及字符串分割分析法,并详细解释了每种方法的实现原理与适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请求的接口是:http://localhost/testenglevel4/branch/server/public/getAnswerScore?questionId=1&studentId=1&answerId=1

请求时需要的参数是:questionIdstudentIdanswerId

questionId表示题号,studentId表示用户编号,answerId表示用户选择的是哪个答案。每个答案其实都有一个isRight属性,不严谨的做法是根据isRight来判断,用户选择的答案是否是正确的,严谨的做法是根据用户选择是的answerId的值来对应answer中的isRight值,来判断用户选择的答案是否正确。

问题一:如何获得当前网页的路径后面的参数值。

  (1)方法一:split进行简单处理,(入门级)该方法有局限,在开发中不建议使用

路径?后面的参数:

var urlParam = decodeURI(window.location.href.split("?")[1]);

decodeURL是对URL路径进行解码,因为难免有些路径会有中文(不过基本上不存在路径中有中文的,而且不建议前端文件中存在中文)。

window.location.href用来获取当前页面链接,

var questionId = urlParam.split("questionId ")[1];
var studentId = urlParam.split("studentId ")[1];
var answerId = urlParam.split("answerId ")[1];

这样就将参数后面的值获得了。

(2)利用正则进行处理 

function getUrlParam(name) {
      var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
      var r = window.location.search.substr(1).match(reg); //匹配目标参数
      if(r != null){
        return decodeURIComponent(r[2]);
      //这里为什么是从第三个字符解析呢?不知道这样理解对不对,因为路径后面的参数形式为参数名=参数值,而第一个字符为参数名,第二个为=,第三个就为参数值了。。。因为下面调用的时候得出的就是参数值
      }
      return null;//返回参数值
    }

RegExp("(^|&)" + name + "=([^&]*)(&|$)")表示的是寻找&+name(路径后面的参数名)+=参数值+&。而后面的&可以不存在,因为路径的最后一个参数是没有&的。

window.location.search.substr(1).match(reg):
   (a)其中loaction是包含了相关的url的信息,它是window的一部分
   (b)search是一个可以查询的属性,查询的是?后面的部分
            window.location.search,查到的就是?questionId=1&studentId=1&answerId=1这部分
   (c)window.location.search.substr(1),是以字符号为1的index开始截取,截取的就是questionId=1&studentId=1&answerId=1。(字符index以0开始计算)
   (d)match(reg),就是匹配正则关系;如果name的值是questionId,那么匹配之后得到的值是questionId=1

注意:这个方法一次只能用在一个参数的获取上,即调用方法是:var questionId = getUrlParam(“questionId”);想要获取另一个参数的值,就得再次调用这个方法。

(3)字符串分割分析法(普遍用法)

function getUrlParam() { 
    var url = location.search; //获取url中"?"符后的字符串包括‘?’ ,window.location.href获取的是url完整的字符串
    var theParam = new Object(); 
    if (url.indexOf("?") != -1) { //确保‘?’不是最后一个字符串,即携带的参数不为空
        var str = url.substr(1); //substr是字符串的用法之一,抽取指定字符的数目,这里抽取?后的所有字符
        strs = str.split("&"); //将获取到的字符串从&分割,输出参数数组,即输出[参数1=xx,参数2=xx,参数3=xx,...]的数组形式
        for(var i = 0; i < strs.length; i ++) { //遍历参数数组
            theParam[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]); //这里意思是抽取每个参数等号后面的值,unescape是解码的意思
        } 
    } 
    return theParam; //返回参数值
}

使用方法是: 

var Parem = new Object();

Param = getUrlParam();

参数1 = Param["参数1"];

参数2 = Param["参数2"];

即: var Param = new Object();

Param = getUrlParam();

 questionId = Param["questionId"];

studentId = Param["studentId"];

answerId = Param["answerId"];

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值