JavaScript и GET-параметры
Практически на каждом
сайте можно видеть ссылки, содержащие в себе параметры
после знака "?", например, http://some.site.com/?id=1.
Обычно обработкой таких параметров занимается серверный
скрипт, но иногда возникает необходимость узнать эти
параметры внутри JavaScript. О том, как это сделать, и
пойдёт рассказ сегодня.
Что представляют из себя, так
называемые, GET-параметры? На самом деле - это просто
строка адреса, но принято, что если в URL-е встречается
символ "?", то все символы после него являются
параметрами. Трактовка параметров - стандартна: сначала
идёт название переменной, потом символ "=", потом
значение переменной, переменные разделяются символом
"&". Узнать текущий адрес в JavaScript можно
прочитав значение window.location. Парсить строку
после "?" придётся в два прохода: сначала разбить на
группы "переменная=значение", а потом уже разбить на
составные части.
Разбиение строки параметров облегчается
тем, что в JavaScript имеется специальная строковая
функция - split(), результатом которой будет
массив строк. Для того, чтобы её использовать, сначала
необходимо создать обьект String, так как данная
функция является методом этого обьекта. Делается это
просто: someVar = new String("some text");
Затем делим строку на подстроки: someArray = someVar.split("x");
Где "x" - символ деления строки на
подстроки. Для того, чтобы найти в строке какой-либо
символ, необходимо воспользоваться ещё одной строковой
функцией - indexOf(): someVar.indexOf('?');
Ввод в теорию закончен. Приступим к
практике. Я решил, что все GET-переменные стоит хранить
в двух отдельных глобальных массивах: один хранит
названия, другой - значения. К сожалению JavaScript не
поддерживает ассоциативные массивы, поэтому
воспользуемся указанным мною способом. Также необходимо
сохранить количество GET-переменных. Конечно, всегда
можно вызвать функцию подсчёта размера массива, но
стилистически мой метод лучше. И так, глобальные
переменные и массивы: var _GET_Keys; // Пока что пустой массив
var _GET_Values;
var _GET_Count = 0; // элементов пока нет
var _GET_Default = '';
Значение переменной _GET_Default будет
обьяснено позже. Далее создам функцию
get_parseGET(), которая будет парсить URL и
создавать массивы с переменными. В самом начале функция
создаёт обьект String и проверяет в нём наличие
символа "?": get = new String(window.location);
x = get.indexOf('?');
if(x!=-1)
{
// здесь будет основной код
}
else ;
Далее вырезаем часть строки,
находящуюся после найденного символа: l = get.length;
get = get.substr(x+1, l-x);
Теперь делим строку на группы
"переменная=значение", вычисляем общее количество
переменных и подготавливаемся к создаиню необходимых
массивов: l = get.split('&');
x = 0;
_GET_Count = l.length;
_GET_Keys = new Array(_GET_Count);
_GET_Values = new Array(_GET_Count);
И в заключение разделяем полученные
группы на два массива с именами переменных и их
значениями: for(i in l)
{
get = l[i].split('=');
_GET_Keys[x] = get[0];
_GET_Values[x] = get[1];
x++;
}
В данном примере используется
конструкция for .. in, перебирающая все элементы
массива. Синтаксис данной конструкции: for ( key in array )
{
// Ваши действия
}
где key - название ключа,
которое будет выбрано из массива array. В теле
цикла к текущему элементу можно бдует обратиться
array[key].
Вторая функция из библиотеки -
get_fetchVar(key), позволяет узнать значение
заданной GET-переменной. Работает простым перебором
массива _GET_Keys. Если ключ не найден, то
возвращает значение _GET_Default, которое
упоминалось выше. Хочу заметить, что значение
_GET_Default вовсе НЕ обязательно менять в самой
библиотеке - при необходимости, это можно сделать в
Вашем HTML-коде: <script language="JavaScript">_GET_Default="tra la la";</script>
В самом конце скрипта следует вызов
get_parseGET(); и на этом библиотека
заканчивается. Вы можете скачать библиотеку и посмотреть её в действии.
источник: www.erased.info
|