如何从JavaScript中检索GET参数?

这个问题在这里已经有了答案:

  • 我怎样才能在JavaScript中获取查询字符串值? 73个答案

  • 使用window.location对象。 此代码可让您在没有问号的情况下进行GET。

    window.location.search.substr(1)
    

    从你的例子中它将返回returnurl=%2Fadmin

    编辑 :我冒昧地改变了Qwerty的答案,这非常好 ,正如他指出的,我完全遵循OP所问的内容:

    function findGetParameter(parameterName) {
        var result = null,
            tmp = [];
        location.search
            .substr(1)
            .split("&")
            .forEach(function (item) {
              tmp = item.split("=");
              if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
            });
        return result;
    }
    

    我从他的代码中删除了重复的函数执行,将其替换为一个变量(tmp),并且我已经按照OP要求添加了decodeURIComponent 。 我不确定这是否会成为安全问题。

    或以其他方式与简单的循环,即使在IE8中也能正常工作:

    function findGetParameter(parameterName) {
        var result = null,
            tmp = [];
        var items = location.search.substr(1).split("&");
        for (var index = 0; index < items.length; index++) {
            tmp = items[index].split("=");
            if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
        }
        return result;
    }
    

    window.location.search将会返回从? 上。 这将删除?,使用split分离成键/值数组,然后将指定的属性分配给params对象:

    function getSearchParameters() {
          var prmstr = window.location.search.substr(1);
          return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
    }
    
    function transformToAssocArray( prmstr ) {
        var params = {};
        var prmarr = prmstr.split("&");
        for ( var i = 0; i < prmarr.length; i++) {
            var tmparr = prmarr[i].split("=");
            params[tmparr[0]] = tmparr[1];
        }
        return params;
    }
    
    var params = getSearchParameters();
    

    然后您可以通过调用params.testhttp://myurl.com/?test=1获取测试参数。


    tl; dr解决方案在使用香草javascript的单行代码上

    var queryDict = {}
    location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
    

    这是最简单的解决方案 。 很遗憾, 它不处理多值键和编码字符。

    "?a=1&a=%2Fadmin&b=2&c=3&d&e"
    > queryDict
    a: "%2Fadmin"  //overriden with last value, not decoded.
    b: "2"
    c: "3"
    d: undefined
    e: undefined
    

    多值键和编码字符?

    如何在JavaScript中获取查询字符串值?

    "?a=1&b=2&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab&a=%2Fadmin"
    > queryDict
    a: ["1", "5", "t e x t", "/admin"]
    b: ["2"]
    c: ["3"]
    d: [undefined]
    e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]
    


    在你的例子中,你可以像这样访问值:

    "?returnurl=%2Fadmin"
    > qd.returnurl    // ["/admin"]
    > qd['returnurl'] // ["/admin"]
    > qd.returnurl[0] // "/admin"
    
    链接地址: http://www.djcxy.com/p/17591.html

    上一篇: How to retrieve GET parameters from javascript?

    下一篇: What constitutes a valid URI query parameter key?