Форум колористов и полиграфистов
https://cielab.xyz/forum/

Передача и прием данных методами GET и POST в JavaScript
https://cielab.xyz/forum/viewtopic.php?f=13&t=292
Страница 1 из 1

Автор:  mihas [ 2:49, Сб, 10 сен 2011 ]
Заголовок сообщения:  Передача и прием данных методами GET и POST в JavaScript

Когда писал калькулятор цветовых различий столкнулся с ограничением на количество знаков, передаваемых от страницы к странице методом GET в адресной строке. Сервер принимал чуть более 4000 знаков а мне хотелось в идеале передавать 50000 и более (например сравнение двух таблиц ECI2002 на 1617 полей). Пришлось воспользоваться методом POST, когда данные передаются серверу скрытно не в адресной строке. Сразу скажем - возможности передать и принять данные POST, в отличие от GET, сам по себе JavaScript не поддерживает. Чтобы передать данные POST надо воспользоваться html-костылем - скрытым полем инпут в форме, а чтобы принять - без PHP не обойтись ну никак. Покажу подробнее. Мне же не данные, введенные в форму, надо передать, а массив переменных. С методом GET просто - сформировал из массива строку с разделителями & и прилепил к гиперссылке после вопросительного знака, отправил так:
window.location='гиперссылка'+'?'+строка
и потом принял в документе с помощью метода location.search. С методом POST нужен примерно вот такой костыль:
<form name="post" method="post" action="colordiff.php?post">
<input type="hidden" name="X1" value="" />
</form>
Теперь отправим данные при помощи JavaScript:
document.post.X1.value = "?"+hyper;
document.post.submit();
hyper - это переменная - строка с данными. Вот такой костыль: ввели в скрытый (hidden) инпут нашу переменную и отправили.
Теперь надо принять переменную в файле colordiff.php, и javaScript без помощи PHP принять данные POST не может, ведь данные принимает сервер а не клиенсткий компьютер, значит нужен серверный сценарий. Вот второй костыль с включением кусочка кода на PHP в тело JavaScript (скрипт размещается внутри страницы php а не отдельным файлом js). Заметим что в первой строчке приведенного ниже кода мы принимаем данные методом GET, проверяем их, и если их содержимое равно "?post" - принимаем данные методом POST. Вот содержание яваскрипта в файле colordiff.php, к которому мы обратились ранее:
var get = location.search;  //переменной get присваивается все содержимое адресной строки начиная с вопросительного знака
if (get == '?post')  {
get = "<?php echo $_POST['X1']; ?>"; // переменной get присваивается содержание, переданное методом POST
//alert(get); }
Вот теперь переменной get присваевается на сервере значение переменной X1, переданной методом POST. Условие я создал для того, чтобы небольшое количество данных передавать в адресной строке методом GET: так можно поделиться ссылкой.
window.location="colordiff.php"+"?"+hyper;
А при слишком длинной переменной hyper передавать ее как X1 методом POST: ссылкой конечно на результаты не поделишься, зато калькулятор все же считает любые таблицы. Ну а если содержание адресной строки отличается от пометки ?post и содержит данные, переданные методом GET, то нам уже не надо ничего принимать методом POST, сразу берем данные из адресной строки и режем по разделителям "&" в массив "adress", отсекая первый знак "?" в строке:
var adress = new Array();
if (get != '') {
adress = (get.substr(1)).split('&');
но это уже другая история. Заметим, что если PHP ничего не принял методом POST, никакой переменной X1 не было, то он возвращает пустое значение а не что-то типа NaN или Undefined, что в моем случае очень удобно: не надо писать дополнительных условий: ведь get = "".

Как передать скрипту методом POST данные от пользователя в виде текстового файла можно прочитать здесь.

Автор:  mihas [ 16:00, Сб, 25 апр 2015 ]
Заголовок сообщения:  Re: Передача и прием данных методами GET и POST в JavaScript

Небольшое дополнение по свежим версия php. Теперь вместо пустого значения несуществующей переменной php выдает ошибку. Может так и правильнее - не суть. Просто требуется внести исправление в приведенный выше скрипт, теперь правильно прием данных POST выглядит у меня так:
if (get == '?post')  {
get = "<?php if (isset($_POST['X1'])) {echo $_POST['X1'];}?>";}
То есть здесь php еще определяет - существует ли переменная $_POST. Ее же может и не быть, если мы просто открыли страницу со скриптом, а не передавали ей данные. Ее так же нет в случае с данными GET и теперь php выдает ошибку, а не пустое значение прямо в тело нашего яваскрипта. Исправляем, теперь будет get = "" - и никакой ошибки от свежей версии php.

Страница 1 из 1 Часовой пояс: UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/