JavaScript: редирект на ту же страницу с изменёнными GET параметрами Столкнулся с ситуацией, когда необходимо совершить редирект на ту же страницу, но с изменённым одним-двумя параметрами. Все остальные параметры должны остаться такими же, если указаны. Например, поисковая форма на сайте поиска товаров. В запросе выставляются параметры - ключевые слова, категория товара, региона, сортировка, текущая страница, кол-во товаров на страницу и т.д... При выводе результатов поиска зачастую необходимо произвести поиск по тем же параметрам, но с углублением в какую-либо категорию; либо же, к примеру, изменить порядок сортировки, или ещё что... После некоторого количества поисков в интернете, сделал фукнцию, которая производит редирект: [js] function isset(obj) { if (typeof(obj) !== 'undefined') return true; return false; } function parse_url(){ // parse href link, returns object url { 'host':'', 'args':{} } // arguments is the assoc array key:value like { 'sortby':'price' } // multiple args like checkbox are set { 'ad_type': ['0', '1', '2'] } var url = { host: '', args: {} }; var args = window.location.href.replace(/#.*/g, '').split('?'); var params = isset(args[1]) ? args[1].split('&') : []; url['host'] = args[0]; for(var i=0; i < params.length; i++){ args = params.split('='); key = args[0]; val = isset(args[1]) ? args[1] : ''; if(key == '' || val == '') continue; // for multiple values like checkboxes if(isset(url['args'][key])){ if(typeof url['args'][key] == 'string'){ url['args'][key] = [url['args'][key], val]; } else { url['args'][key].push(val); } } else { url['args'][key] = val; } } return url; } function redirect(values){ // redirect to the page with changed arguments // values object example { 'limit':'20', 'start':'' } // all values should be quoted, even numbers ! // empty value remove / set default argument // array value set multiple values (for checkboxes) if(!isset(values)) values = {}; url = parse_url(); for(var key in values){ if(values[key] == ''){ delete url['args'][key]; } else { url['args'][key] = values[key]; } } args = []; for(var key in url['args']){ if(typeof url['args'][key] == 'string'){ args.push( key + '=' + encodeURIComponent(url['args'][key])); } else { for(var i=0; i < url['args'][key].length; i++){ args.push( key + '=' + encodeURIComponent(url['args'][key])); } } } url = args.length > 0 ? url['host'] + '?' + args.join('&') : url['host']; window.location.href = url; } [/js] функция parse_url производит разбор текущего адреса, и возвращает в виде массива, который можно использовать далее. Функция redirect производит собственно редирект с изменёнными параметрами. Пример использования: необходимо произвести поиск по тем же параметром, но в другой категории, и начать с первой страницы <a href="javascript:void(0)" onclick="redirect({ 'category': '24', 'page': '' })">Filter by cars</a> Функция редирект принимает ассоциативный массив параметров запроса в виде ключ-значение, которые заменяются в исходном адресе страницы, если имеются. Если не имеются - добавляются. Если значение равно пустой строке "" (в данном примере - page), то данное значение вообще удаляется из запроса (при наличии в запросе). Если в качестве значения передать массив, то значения этого массива будут использованы как checkboxes. Хотя большинство предпочитают делать это через серверный код, может кому пригодится и клиентский