Колориметрия, печать и препресс: технологии Главная Форум Галерея Контакты Download Статьи
Сражаясь неустанно,
доживём мы, Санчо,
до Золотого века!
 

Форум колористов и полиграфистов

Колориметрия и печать: технологии
 
Текущее время: 4:09, Вс, 19 ноя 2017
Темы без ответов | Активные темы


Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 2 сообщения ] 
Автор Сообщение
СообщениеДобавлено: 2:49, Сб, 10 сен 2011 
Не в сети
Администратор

Зарегистрирован: 16:58, Ср, 18 авг 2004
Сообщения: 743
Откуда: Москва
Когда писал калькулятор цветовых различий столкнулся с ограничением на количество знаков, передаваемых от страницы к странице методом 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 данные от пользователя в виде текстового файла можно прочитать здесь.


Вернуться к началу
СообщениеДобавлено: 16:00, Сб, 25 апр 2015 
Не в сети
Администратор

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


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 2 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
© CIELab.XYZ
Создано на основе phpBB® Forum Software © phpBB Limited
Конференция запущена 18 августа 2004 года | Защищено от спама системой stopforumspam
Всего посещений - 4111636 | Всего за день - 55 | Уникальных сегодня - 14, вчера - 215, позавчера - 308