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

IT技术 javascript parsing url
2021-01-13 07:10:58

我正在尝试将数据从一页传递到另一页。

www.mints.com?name=something

如何name使用 JavaScript阅读

6个回答

在使用像下面这样的自定义解析函数或 3rd 方库之前请参阅这个,更当前的解决方案

下面的代码有效并且在URLSearchParams不可用的情况下仍然有用,但它是在 JavaScript 中没有可用的本机解决方案的时候编写的。在现代浏览器或 Node.js 中,更喜欢使用内置功能。


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

使用方法如下:

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

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

{
  "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  */ 
} 

所以

parseURLParams("www.mints.com?name=something")

{name: ["something"]}

编辑此答案原始版本使用基于正则表达式的 URL 解析方法。它使用了一个较短的函数,但该方法有缺陷,我用适当的解析器替换了它。

@Tomalak 你能告诉我打印 name 值的方法吗?我正在尝试使用这个脚本,当我使用 document.write(urlParams); 它给了我 [object Object] 但我没有得到实际值..你能帮我吗?
2021-03-21 07:10:58
@KiranVemuri:试试 console.log(JSON.stringify(urlParams))
2021-03-28 07:10:58
如果有人仍然想知道如何从urlParams语法中获取数据是:urlParams["name"][0]这将返回:"something"
2021-03-31 07:10:58
如何只获取密钥而不获取值?例如 - 如果 url 就像example.php?name,在这种情况下它不包含name=something,我只想获取,name因为我的 url 是动态的,因此该值可以更改,因此我需要一种获取该值的方法。
2021-04-06 07:10:58
好吧,只有钥匙实际上很容易,我做到了 -for(var a in parms) { console.log(a); }这只会返回钥匙。
2021-04-08 07:10:58

现在是 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"]

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

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"]

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

哦对不起,我正在使用 react 所以我应该把 this.props.location.search
2021-03-18 07:10:58
@ShashankAC 这真的很奇怪。它适用于我的 Chrome。你在哪个页面测试这个?例如,location.searchexample.com/?foo=bar是否会给您任何信息
2021-04-02 07:10:58
我正在使用谷歌浏览器
2021-04-05 07:10:58
location.search 是什么?我在那里遇到错误。
2021-04-13 07:10:58
@ShashankAC 您使用的是哪个浏览器?
2021-04-13 07:10:58

我认为这也应该有效:

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

就这样称呼它:

var value = $_GET('myvariable');

试试这个方法

var url_string = window.location;
var url = new URL(url_string);
var name = url.searchParams.get("name");
var tvid = url.searchParams.get("id");
最简单的答案
2021-03-20 07:10:58

这是一种解决方案。当然,这个函数不需要加载到“window.params”选项中——可以自定义。

window.params = function(){
    var params = {};
    var param_array = window.location.href.split('?')[1].split('&');
    for(var i in param_array){
        x = param_array[i].split('=');
        params[x[0]] = x[1];
    }
    return params;
}();

http://www.mints.com/myurl.html?name=something&goal=true上的示例 API 调用

if(window.params.name == 'something') doStuff();
else if( window.params.goal == 'true') shoutGOOOOOAAALLL();