Доступ к GET напрямую из JavaScript?

Я полагаю, что я мог бы использовать PHP для доступа к переменным $_GET из JavaScript:

 <script> var to = $_GET['to']; var from = $_GET['from']; </script> <script src="realScript" type="text/javascript"></script> 

Но, возможно, это еще проще. Есть ли способ сделать это прямо из JS?

смотреть на

 window.location.search 

Он будет содержать строку вроде этого ?foo=1&bar=2

Чтобы перейти от объекта к объекту, вам нужно всего лишь разделить:

 var parts = window.location.search.substr(1).split("&"); var $_GET = {}; for (var i = 0; i < parts.length; i++) { var temp = parts[i].split("="); $_GET[decodeURIComponent(temp[0])] = decodeURIComponent(temp[1]); } alert($_GET['foo']); // 1 alert($_GET.bar); // 2 

Вот еще одна идея:

 <script type="text/javascript"> var $_GET = <?php echo json_encode($_GET); ?>; alert($_GET['some_key']); // or alert($_GET.some_key); </script> 

Полагаю, вы думали так:

 <script type="text/javascript"> var to = "<?= $_GET['to']; ?>"; var from = "<?= $_GET['from']; ?>"; </script> 

… это просто синтаксическая коррекция вашей идеи 🙂

Я знаю, что эта тема устарела, но я хочу поделиться своим собственным оптимизированным ES6 решением для $ _GET в JavaScript. Похоже, что все более популярные вопросы по этому вопросу заблокированы от вкладов SO newbies, так что вот оно:

Один лайнер

 window.$_GET = location.search.substr(1).split("&").reduce((o,i)=>(u=decodeURIComponent,[k,v]=i.split("="),o[u(k)]=v&&u(v),o),{}); 

Я хотел бы связать вас всех с документацией MDN по array.reduce () , функциям стрелок , оператору запятой , назначению деструктуризации и оценке коротких ссылок, но, увы, другому ограничению SO-новичков.

Для URL-адреса, такого как google.com/webhp?q=foo&hl=en&source=lnt&tbs=qdr%3Aw&sa=X&ved=&biw=12 вас есть объект:

 $_GET = { q: "foo", hl: "en", source: "lnt", tbs: "qdr:w", sa: "X", ved: "", biw: "12" } 

и вы можете делать такие вещи, как $_GET.q или $_GET['biw'] чтобы получить то, что вам нужно. Обратите внимание, что этот подход заменяет дублированные параметры запроса последним заданным значением в строке поиска, что может быть нежелательным / неожиданным

URLSearchParams ()

Теперь у нас также есть URLSearchParams () в (большинстве) новых браузерах, который позволяет вам делать такие вещи, как:

 window.$_GET = new URLSearchParams(location.search); var value1 = $_GET.get('param1'); 

Как объяснили другие, вы можете проанализировать URL страницы из JS, чтобы получить переменные.

Вы также можете использовать AJAX на странице, которая передает значения. Это зависит от того, какую информацию вы передаете, а затем возвращаетесь к пользователю. (Это определенно не простой или более прямой способ сделать это, просто альтернативный подход)

Я использую этот для запроса Get (например, $ _GET в php):

  var urlParams; (window.onpopstate = function () { var match, pl = /\+/g, Regex for replacing addition symbol with a space search = /([^&=]+)=?([^&]*)/g, decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); }, query = window.location.search.substring(1); urlParams = {}; while (match = search.exec(query)) urlParams[decode(match[1])] = decode(match[2]); })(); 
 document.get = function (d1,d2,d3) { var divider1 = (d1 === undefined ? "?" : d1); var divider2 = (d2 === undefined ? "&" : d2); var divider3 = (d3 === undefined ? "=" : d3); var url = window.location.href; //the current url var pget = url.split(divider1)[1]; //slit the url and assign only the part after the divider 1 var pppget = {}; //define the contenitor object if (pget.search(divider2) > -1) { //control if there is variable other than the first (?var1=a&var2=b) the var2 in this example var ppget = pget.split(divider2); //split the divider2 for (i = 0;i==ppget.lenght; i++) { //start a for and stop it when i == at object length if (ppget[i].search(divider3) > -1) { //control if is an empty var psget = ppget[i].split(divider3);//if is split in 2 part using divider 3 pppget[psget[0]] = psget[1];//assign to the object the value of first element and for value the second value ex {var1=a,...} } else {//if is a empty var (?var1&...) pppget[ppget[i]] = "";//assign only the value of first element with value a blank string } } } else {//if the url don't contain other variable if (pget.search(divider3) > -1) { //control if is an empty var var ppget = pget.split(divider3);//if is split in 2 part using divider 3 pppget[ppget[0]] = ppget[1];//assign to the object the value of first element and for value the second value ex {var1=a} } else {//if is a empty var (?var1) pppget[pget] = "";//assign only the value of first element with value a blank string } } return pppget; /* return the object * the use of the function is like this $_GET=document.get() * echo $_GET[var] * or use custom divider the default is setted for php standard divider */};