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

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

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

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

Ответы

Ответ 1

Посмотрите

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

Ответ 2

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

<script type="text/javascript">

var $_GET = <?php echo json_encode($_GET); ?>;

alert($_GET['some_key']);
// or
alert($_GET.some_key);

</script>

Ответ 3

Я полагаю, вы думали об этом:

<script type="text/javascript">

    var to = "<?= $_GET['to']; ?>";
    var from = "<?= $_GET['from']; ?>";

</script>

... это будет просто синтаксическая коррекция вашей идеи:)

Ответ 4

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

Один вкладыш

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

Ответ 5

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

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

Ответ 6

Я использую этот для запроса 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]);
    })();

Ответ 7

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