Developer notes
Конечно, громко сказано — альтернатива php скрипту. Имеется в виду отправка, обработка и получение ответа данных всевозможными методами (GET, POST). Как говорится, это классика. Но есть и вот такой вот альтернативный способ. Это взаимодействие html — файликов с помощью URL — адресов и JavaScript. Итак, подробности.
Передача данных в html-файл через URL-адрес.
После адреса ставиться знак вопроса и после него параметр, который нужно передать.
html://webpage.html?parametr
Если этих параметров несколько, то между ними ставиться амперсанд (&).
html://webpage.html?parametr1¶metr2¶metr3
Помимо этого можно передавать при помощи форм. Для этого нужно воспользоваться методом GET.
Выглядеть URL-адрес в строке броузера будет следующим образом:
webpage.html?name1=value1&name2=value2&name3=value3
Получение переданных данных выполняется при помощи JavaScript.
Сначало мы присваиваем переменной все то, что находится после знака вопроса:
var p_url=location.search.substring(1);
Если передавался один параметр, то переменную p_url можно обрабатывать.
Если параметров было много, то их нужно разделить:
var parametr=p_url.split("&");
В итоге мы получаем массив parametr, который содержит полученные данные.
Если Вы переслали данные при помощи форм, то надо избавиться от знака равенства и присвоить каждой переменной свое значение:
var values= new Array(); for(i in parametr) < var j=parametr[i].split(" Serg"; values[city]="Рязань"; values[age]="21";
values[0]="Serg"; values[1]="Рязань"; values[2]="21";
Отправка данных формы
Сама форма обычно предназначена для получения от пользователя информации для дальнейшей пересылки её на сервер, где данные формы принимает программа-обработчик. Такая программа может быть написана на любом серверном языке программирования вроде PHP, Perl и др. Адрес программы указывается в атрибуте action тега , как показано в примере 1.
Пример 1. Отправка данных формы
В этом примере данные формы, обозначенные атрибутом name ( login и password ), будут переданы в файл по адресу /example/handler.php. Если атрибут action не указывать, то передача происходит на адрес текущей страницы.
Передача на сервер происходит двумя разными методами: GET и POST, для задания метода в теге используется атрибут method , а его значениями выступают ключевые слова get и post . Если атрибут method не задан, то по умолчанию данные отправляются на сервер методом GET. В табл. 1 показаны различия между этими методами.
GET | POST | |
---|---|---|
Ограничение на объём | 4 Кб | Ограничения задаются сервером. |
Передаваемые данные | Видны сразу всем. | Видны только при просмотре через расширения браузера или другими методами. |
Кэширование | Страницы с разными запросами считаются различными, их можно кэшировать как отдельные документы. | Страница всегда одна. |
Закладки | Страницу с запросом можно добавить в закладки браузера и обратиться к ней позже. | Страницы с разными запросами имеют один адрес, запрос повторить нельзя. |
Какой метод используется легко определить по адресной строке браузера. Если в ней появился вопросительный знак и адрес стал похож на этот, то это точно GET.
Уникальное сочетание параметров в адресной строке однозначно идентифицирует страницу, так что страницы с адресами ?q=node/add и ?q=node считаются разными. Эту особенность используют системы управления контентом (CMS, Content management system) для создания множества страниц сайта. В реальности же используется один файл, который получает запрос GET и согласно ему формирует содержимое документа.
Ниже перечислены типовые области применения этих методов на сайтах.
GET
Передача небольших текстовых данных на сервер; поиск по сайту.
Поисковые системы, формы поиска по сайту всегда отправляются методом GET, это позволяет делиться результатами поиска с друзьями, слать ссылку по почте или выкладывать её на форуме.
POST
Пересылка файлов (фотографий, архивов, программ и др.); отправка комментариев; добавление и редактирование сообщений на форуме, блоге.
Работа с формой по умолчанию происходит в текущей вкладке браузера, при этом допустимо при отправке формы изменить этот параметр и открывать обработчик формы в новой вкладке или во фрейме. Такое поведение задаётся через «имя контекста», которое выступает значением атрибута target тега . Популярные значения это _blank для открытия формы в новом окне или вкладке, и имя фрейма, которое задаётся атрибутом name тега (пример 2).
Пример 2. Открытие формы во фрейме
В данном примере при нажатии на кнопку «Отправить» результат отправки формы открывается во фрейме с именем area .
Элементы формы традиционно располагаются внутри тега , тем самым определяя те данные, которые будут передаваться на сервер. В то же время в HTML5 есть возможность отделить форму от её элементов. Это сделано для удобства и универсальности, так, сложный макет может содержать несколько форм, которые не должны пересекаться меж собой или к примеру, некоторые элементы выводятся с помощью скриптов в одном месте страницы, а сама форма находится в другом. Связь между формой и её элементами происходит в таком случае через идентификатор формы, а к элементам следует добавить атрибут form со значением, равным этому идентификатору (пример 3).
Пример 3. Связывание формы с полями
В этом примере тег однозначно отождествляется через идентификатор auth , а к полям, которые следует отправить с помощью формы, добавляется form=»auth» . При этом поведение элементов не меняется, при нажатии на кнопку логин и пароль пересылаются на обработчик handler.php.
Хотя параметры передачи формы традиционно указываются в теге , их можно перенести и в кнопки отправки формы ( и ). Для этого применяется набор атрибутов formaction , formmethod , formenctype и formtarget , которые являются аналогами соответствующих атрибутов без приставки form. В примере 4 показано использование этих атрибутов.
Все новые атрибуты форм не поддерживаются некоторыми браузерами, в частности, Internet Explorer и Safari.
Передача значения JavaScript между HTML-страницами
В этой статье мы рассмотрим передачу значения JavaScript между HTML-страницами. Итак, в основном у нас будут две HTML-страницы, и мы переместим некоторую информацию с одной страницы на другую, используя некоторые базовые методы. Так что эта штука будет очень полезна, когда вы попытаетесь создать веб-сайты, где вам нужно передавать данные с одной страницы на другую. Мы увидим это на очень простом примере и объяснении.
Методы передачи значения JavaScript между HTML-страницами
Хорошо, сначала давайте рассмотрим несколько различных методов передачи значения JavaScript между HTML-страницами:
- Локальное хранилище
- Строка запроса URL
- IndexedDB
- Одностраничное приложение (SPA)
Так что это основные методы, которые помогают в выполнении этой конкретной задачи. Мы рассмотрим два из этих методов: локальное хранилище и строку запроса URL. Поскольку эти методы довольно хороши и прямолинейны, IndexedDB также очень похож на локальное хранилище, но с ним сложно иметь дело. Одностраничные приложения — это не что иное, как AngularJS и ReactJS, что делает эту задачу намного проще, чем другие методы, а также это не та тема, которую мы можем затронуть в этой отдельной статье.
Передача значения JavaScript между HTML-страницами: локальное хранилище
Первый базовый метод — это локальное хранилище, которое на самом деле является одним из основных способов. Метод локального хранения уже задан самим JavaScript. Теперь давайте посмотрим на базовый пример, чтобы понять глубже, здесь мы попытаемся передать время на вторую страницу с первой страницы.
Итак, здесь мы создаем две HTML-страницы и два связанных с ними JS-файла. В первом HTML-файле мы просто добавили заголовок и кнопку. Затем в файле app.js мы создали объект для Date() , а затем добавили событие нажатия на кнопку, где мы получили доступ к методу localStorage() .
Чтобы мы могли использовать его и сохранить дату с помощью localStorage.setItem() . Затем мы использовали этот window.document.location = ‘./index2.html’ ; чтобы установить целевое местоположение, где нам нужно получить доступ к этим данным. Наконец, мы должны запустить эту функцию, когда эта страница загружается с помощью document.addEventListener(‘DOMContentLoaded’, function()< init();>)
Click The Button To Go On Next Page
const init = (e) =>< let btn = document.querySelector("#item1"); let startTime = new Date(); btn.addEventListener('click', function()< localStorage.setItem('start-time', startTime.getTime()); window.document.location = './index2.html'; >); >; document.addEventListener('DOMContentLoaded', function()< init(); >);
Теперь мы добавили некоторые основные заголовки, а также добавим span с id, чтобы мы могли помещать в него данные, используя его ID. Затем в сценарии app2.js мы получим доступ к этим данным, используя этот метод localStorage.getItem(‘start-time’) . Теперь мы создали еще один объект Date() и просто вычитаем оба значения времени. И мы добавили вызов функции при загрузке нашей второй страницы.
Next Page
Here's The Amount of Time Passed: TIME
const init = (e) => < let spn = document.querySelector("#time"); let endTime = new Date(); let elapsedTime = endTime.getTime()- localStorage.getItem('start-time'); spn.innerHTML = elapsedTime; >document.addEventListener("DOMContentLoaded", function()< init(); >)
Передача значения JavaScript между HTML-страницами: строка запроса URL
Теперь давайте посмотрим на другой метод выполнения той же задачи — использование строки запроса URL. В файле app.js мы снова создали объект Date() и добавили такое же событие нажатия на эту кнопку. Здесь мы использовали window.document.location , где указали целевой HTML-файл, в котором мы будем получать доступ к этим данным. Кроме того, мы добавили ‘?startTime=’ +startTime.getTime() , чтобы эта строка передавалась как URL вместе со временем.
const init = (e) =>< let btn = document.querySelector("#item1"); let startTime = new Date(); btn.addEventListener('click', function()< window.document.location = './index2.html' + '?startTime=' + startTime.getTime(); >); >; document.addEventListener('DOMContentLoaded', function()< init(); >);
Теперь в файле app2.js мы создали еще один объект даты, из которого будем вычитать startTime . Затем мы получим время из строки URL, используя метод window.location.search() . И из этого нам просто нужно получить время или просто данные, для этого мы применим метод замены к этой строке URL. И мы добавили регулярное выражение, чтобы мы могли получить строку URL, кроме данных, и заменили ее пустой строкой.
Наконец, мы просто вычтем данные из текущего времени. Итак, этот метод следует использовать для передачи небольшого количества данных, потому что данные, которые мы передаем, будут отражены в URL-адресе.
"use strict" const init = (e) => < let spn = document.querySelector("#time"); let endTime = new Date(); console.log(endTime); let startTime = window.location.search.replace(/^.*?\=/,''); spn.innerHTML = endTime.getTime() - startTime; >document.addEventListener("DOMContentLoaded", function()< init(); >)