如何使用JavaScript从URL读取GET数据?

jbc*_*dge 43 javascript url parsing

我正在尝试将数据从一个页面传递到另一个页面.

www.mints.com?name=something

如何name使用JavaScript 阅读?

Tom*_*lak 62

function parseURLParams(url) {
    var queryStart = url.indexOf("?") + 1,
        queryEnd   = url.indexOf("#") + 1 || url.length + 1,
        query = url.slice(queryStart, queryEnd - 1),
        pairs = query.replace(/\+/g, " ").split("&"),
        parms = {}, i, n, v, nv;

    if (query === url || query === "") return;

    for (i = 0; i < pairs.length; i++) {
        nv = pairs[i].split("=", 2);
        n = decodeURIComponent(nv[0]);
        v = decodeURIComponent(nv[1]);

        if (!parms.hasOwnProperty(n)) parms[n] = [];
        parms[n].push(nv.length === 2 ? v : null);
    }
    return parms;
}
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

var urlString = "http://www.foo.com/bar?a=a+a&b%20b=b&c=1&c=2&d#hash";
    urlParams = parseURLParams(urlString);
Run Code Online (Sandbox Code Playgroud)

它返回一个像这样的对象:

{
  "a"  : ["a a"],     /* param values are always returned as arrays */
  "b b": ["b"],       /* param names can have special chars as well */
  "c"  : ["1", "2"]   /* an URL param can occur multiple times!     */
  "d"  : [null]       /* parameters without values are set to null  */ 
} 
Run Code Online (Sandbox Code Playgroud)

所以

parseURLParams("www.mints.com?name=something")
Run Code Online (Sandbox Code Playgroud)

{name: ["something"]}
Run Code Online (Sandbox Code Playgroud)

编辑:此答案原始版本使用基于正则表达式的URL解析方法.它使用了较短的功能,但方法存在缺陷,我用适当的解析器替换它.

  • 如果有人还在想如何从`urlParams`获取数据,那么语法是:`urlParams ["name"] [0]`它会返回:`"something"` (2认同)

Fra*_* Yu 11

现在是2019年,不需要任何手写的解决方案或第三方库。如果要在浏览器中解析当前页面的URL:

# running on https://www.example.com?name=n1&name=n2
let params = new URLSearchParams(location.search);
params.get('name') # => "n1"
params.getAll('name') # => ["n1", "n2"]
Run Code Online (Sandbox Code Playgroud)

如果要解析随机URL,请在浏览器或Node.js中:

let url = 'https://www.example.com?name=n1&name=n2';
let params = (new URL(url)).searchParams;
params.get('name') # => "n1"
params.getAll('name') # => ["n1", "n2"]
Run Code Online (Sandbox Code Playgroud)

它利用了现代浏览器附带的URLSearchParams接口。


小智 10

你可以轻松做到这一点

const shopId =  new URLSearchParams(window.location.search).get('shop_id');
console.log(shopId);
Run Code Online (Sandbox Code Playgroud)


Ste*_*ven 7

我认为这也应该有效:

function $_GET(q,s) {
    s = (s) ? s : window.location.search;
    var re = new RegExp('&amp;'+q+'=([^&amp;]*)','i');
    return (s=s.replace(/^\?/,'&amp;').match(re)) ?s=s[1] :s='';
}
Run Code Online (Sandbox Code Playgroud)

只需将其称为:

var value = $_GET('myvariable');
Run Code Online (Sandbox Code Playgroud)


Las*_*mal 6

试试这个方法

var url_string = window.location;
var url = new URL(url_string);
var name = url.searchParams.get("name");
var tvid = url.searchParams.get("id");
Run Code Online (Sandbox Code Playgroud)