如何使用JavaScript读取来自URL的GET数据?

我试图将数据从一个页面传递到另一个页面。

www.mints.com?name=something

如何使用JavaScript读取name

 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.foo.com/bar?a=a+a&b%20b=b&c=1&c=2&d#hash"; urlParams = parseURLParams(urlString); 

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

 { "a" : ["aa"], /* param values are always returned as arrays */ "bb": ["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"]} 

编辑 : 这个答案的原始版本使用基于正则expression式的方法来parsingURL。 它使用了一个较短的函数,但方法有缺陷,我用适当的parsing器replace了它。

我认为这也应该工作:

 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'); 

location.search https://developer.mozilla.org/en/DOM/window.location

尽pipe大多数使用某种parsing例程来读取查询string参数。

这里有一个http://safalra.com/web-design/javascript/parsing-query-strings/

这是一个解决scheme。 当然,这个函数不需要加载到“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; }(); 

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

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

Iv'e固定/改进Tomalak的答案:

  • 仅在需要时才创build一个数组。
  • 如果值中有另一个方程符号,
  • 它现在使用location.search值而不是url。
  • 空的searchstring会导致一个空的对象。

码:

 function getSearchObject() { if (location.search === "") return {}; var o = {}, nvPairs = location.search.substr(1).replace(/\+/g, " ").split("&"); nvPairs.forEach( function (pair) { var e = pair.indexOf('='); var n = decodeURIComponent(e < 0 ? pair : pair.substr(0,e)), v = (e < 0 || e + 1 == pair.length) ? null : decodeURIComponent(pair.substr(e + 1,pair.length - e)); if (!(n in o)) o[n] = v; else if (o[n] instanceof Array) o[n].push(v); else o[n] = [o[n] , v]; }); return o; } 

我也疯了一个相当简单的function。 你可以通过以下方式调用它:get(“yourgetname”);

并得到任何东西。 (现在我写了,我注意到,如果你有一个&你的价值,它会给你%26。)

 function get(name){ var url = window.location.search; var num = url.search(name); var namel = name.length; var frontlength = namel+num+1; //length of everything before the value var front = url.substring(0, frontlength); url = url.replace(front, ""); num = url.search("&"); if(num>=0) return url.substr(0,num); if(num<0) return url; } 

目前select的答案在我的情况下根本不起作用,我觉得这是一个相当典型的答案。 我在这里find了下面的函数,它工作的很棒!

 function getAllUrlParams(url) { // get query string from url (optional) or window var queryString = url ? url.split('?')[1] : window.location.search.slice(1); // we'll store the parameters here var obj = {}; // if query string exists if (queryString) { // stuff after # is not part of query string, so get rid of it queryString = queryString.split('#')[0]; // split our query string into its component parts var arr = queryString.split('&'); for (var i=0; i<arr.length; i++) { // separate the keys and the values var a = arr[i].split('='); // in case params look like: list[]=thing1&list[]=thing2 var paramNum = undefined; var paramName = a[0].replace(/\[\d*\]/, function(v) { paramNum = v.slice(1,-1); return ''; }); // set parameter value (use 'true' if empty) var paramValue = typeof(a[1])==='undefined' ? true : a[1]; // (optional) keep case consistent paramName = paramName.toLowerCase(); paramValue = paramValue.toLowerCase(); // if parameter name already exists if (obj[paramName]) { // convert value to array (if still string) if (typeof obj[paramName] === 'string') { obj[paramName] = [obj[paramName]]; } // if no array index number specified... if (typeof paramNum === 'undefined') { // put the value on the end of the array obj[paramName].push(paramValue); } // if array index number specified... else { // put the value at that index number obj[paramName][paramNum] = paramValue; } } // if param name doesn't exist yet, set it else { obj[paramName] = paramValue; } } } return obj; }