Разбор GET запроса средствами JavaScript

GET запросы (запросы через адресную строку) можно легко разбирать при помощи JavaScript. Продемонстрирую это на следующем примере
: напишите в адресной строке любые параметры в формате ?параметр=значение&параметр=значение...

переменные GET запроса:
var tmp = new Array();		// два вспомагательных
var tmp2 = new Array();		// массива
var param = new Array();

var get = location.search;	// строка GET запроса
if(get != '') {
	tmp = (get.substr(1)).split('&');	// разделяем переменные
	for(var i=0; i < tmp.length; i++) {
		tmp2 = tmp[i].split('=');		// массив param будет содержать
		param[tmp2[0]] = tmp2[1];		// пары ключ(имя переменной)->значение
	}
	var obj = document.getElementById('greq');	// вывод на экран
	for (var key in param) {
		obj.innerHTML += key+" = "+param[key]+"";
	}
}

Ключевым значением является location.search (см. статью про tag base).

14 thoughts on “Разбор GET запроса средствами JavaScript

  1. А вот как теперь кракозябры
    %EF%E0%F0%E0%EC%E5%F2%F0 = %E7%ED%E0%F7%E5%ED%E8%E5
    в нормальный текст превратить?

  2. м.б. так: <html><body> <script>function q (s) { s = decodeURIComponent(s); alert(s); }</script> <a href="javascript:q('%EF%E0%F0%E0%EC%E5%F2%F0 = %E7%ED%E0%F7%E5%ED%E8%E5');">test</a> </body></html>

  3. Так называемые "кракозябры" это Unicode-кодированные символы кириллицы. Преобразовать обратно в кириллические символы их можно с помощью встроенной функции — unescape().

  4. а как сделать что бы тот же GET брался не из адресной строки а из подключения скрипта, т.е <script type="text/javascript" src="скрипт.js?id=17&id=17"></script>

  5. С помощью jQuery например так var get = $('script[src*="скрипт.js"]').attr('src').replace(/[^?]+?/, ''); и далее по коду

  6. Огроменное спасибо. чуть по ковырял — все работает

  7. Просто, лаконично, Работает! ps: по рекламе нажал)

  8. в случае если есть только ключ и нет значения, значение будет undefined заменить строчку: param[tmp2[0]] = tmp2[1]; на: param[tmp2[0]] = (typeof tmp2[1] == 'undefined')?'':tmp2[1];

  9. По поводу кракозябр: unescape() у меня почему-то неверно отработал, зато decodeURI() перевел все правильно!

  10. <html> <head> <title></title> <style> #content { width: 70%; height: 410px; border: 1px solid grey; border-radius: 7px; padding: 20px; display: block; float: right; } #menu { width: 20%; height: 415px; padding: 25px; padding-top: 10px; display: block; float: left; border: 1px solid grey; border-radius: 7px; } p + p { text-align: center; } </style> <script type="text/javascript"> var tmp = new Array(); var tmp2 = new Array(); var param = new Array(); var get = location.search; if(get != '') { tmp = (get.substr(1)).split('&'); for(var i=0; i < tmp.length; i++) { tmp2 = tmp[i].split('='); param[tmp2[0]] = tmp2[1]; } var obj = document.getElementById('greq'); for (var key in param) { obj.innerHTML += key+" = "+param[key]+"<br>"; } }

  11. </script> </head> <body> <div id="menu"> <form action="index.php" name="Send"> <p><input type="text" name="Name" maxlength="20" style="width: 200px;" value="Имя"></p> <p><textarea name="Mail" style="height: 70px; width: 200px; max-width: 200px; max-height: 300px;">Сообщение</textarea></p> <p><input type="submit"></p> </form> </div> <div id="content"> <p>Вывод сообщения</p> </div> </body> </html>

  12. Спасибо за статью, очень помогла

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *