Pull to refresh

Запросы к JavaScript

Reading time 2 min
Views 2.5K
Есть необходимость: передавать параметры непосредственно JavaScript.
Мы можем передавать параметры через GET, POST, но при передаче этих параметров просто будет загружаться новая страница, т.е. если в кеше браузера есть

some.so/index.php?id=2

а мы запрашиваем

some.so/index.php?id=3

то сервер для нас сгенерирует новую страницу, он не будет брать из кеша some.so/index.php?id=2 (и правильно будет делать).

Таже самая ситуация и с POST, поэтому говорить о том, что методами GET и POST можно передать параметры яваскрипту конечно можно, но это будет не совсем правдой. Т.к. параметры передаются на сервер, там генерируется новый контент, а там можно что угодно делать. Хоть напрямую GET переменные брать из window.location.href, хоть как-то серверным языком каждый раз заново генерить JavaScript. а это всё только имитация запросов к JavaScript.

Однако, есть один символ в стандарте URL, который нам поможет.



Это символ решетки (#), хотя некоторые говорят, что это символ английской денежной единицы, но сейчас это не важно.

Весь фокус в том, что если в кеше есть

some.so/index.php#id:2

а мы запросим

some.so/index.php#id:3

то вторая страница будет взята из кеша (в который она попала после первого запроса).

Итак, перейдем к делу: после символа решетки в URL разрешено использовать символы
: _ — .
и любые латинские символы.

Пусть пара (ключ: значение) у нас будут разделяться точкой; сам ключ отделяться от значения двоеточием, а экранирование будем делать при помощи подчеркивания.

Таким образом, если мы хотим передать 2 параметра, то выглядеть это будет примерно так:

some.so/index.php#id:2.par2:dgsdgd

если хотим передать символы точки, двоеточия или не латинские символы, то делаем это так:

some.so/index.php#id:_56_34.par2:_21_20_54

От обычных ссылок some.so/index.php#chapter7 такие запросы к JavaScript (jR = JavaScript Request) можно отличать по наличию двоеточия (:) после #, т.к. я не разу не видел, чтобы там кто-то ставил двоеточие.

Написать js функции, которые будут обрабатывать jR не составляет труда, — берем window.location.href, обрезаем его регэкспом, сплитим строку в массив, сплитим элементы массива на ключ и значение. Вот и всё.

Это реально работает, и реально бережет трафик, дает веселые эффекты с AJAX, в общем, экспериментируйте.

Конечно, ТБЛ не очень бы порадовался такому использованию, но всё таки, думаю, клиентский JavaScript заслужил то, что теперь он будет иметь возможность получать параметры непосредственно для себя. Ура!
Tags:
Hubs:
+5
Comments 25
Comments Comments 25

Articles