Как прочитать GET параметры на стороне клиента из кода на javascript? Бывают ситуации, когда нужно что то сделать из JS в зависимости от переданных параметров в URL страницы.
В целом, техника не сложная, т.к. javascript предоставляет доступ к url страницы, в том числе и параметрам запроса GET.
HTML код:
1 2 3 |
<script> alert(document.location); </script> |
покажет попап с адресом документа. document.location — это объект, который содержит ряд свойств и методов для работы с адресом локации, но нас интересует его свойство document.location.search, которое содержит параметры GET.
Для получения определенного параметра из этой строки, придется выделить значение с помощью, например, регулярного выражения:
1 2 3 4 |
function extractGet(name) { var result = window.location.search.match(new RegExp(name + '=([^&=]+)')); return result ? result[1] : false; } |
А вот так можно получить все значения:
1 2 3 4 5 6 7 8 9 |
function extractGetAll() { var vars = window.location.search.match(new RegExp('[^&?]+', 'gm')); var result = {}; for (var i=0; i < vars.length; i++) { var r = vars[i].split('='); result[r[0]] =r[1]; } return result; } |
Результат будет получен в виде объекта (хеш-массива).
К примеру, для локации http://ваш-сайт?a=1&b=2, вы получите объект
1 2 3 4 |
{ a: "1", b: "2" } |
Обратите внимание, что полученные строчные значения нужно будет еще перекодировать, используя функцию decodeURIComponent, т.е. в более общем случае мы получим:
1 2 3 4 |
function extractGet(name) { var result = window.location.search.match(new RegExp(name + '=([^&=]+)')); return result ? decodeURIComponent( result[1].replace(/\+/g, " ") ) : false; } |
Еще может требоваться замена символа «+» на пробел (уже учено в коде выше).