Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Вниз

Файл CGI   Найти похожие ветки 

 
Evgeny   (2003-02-13 13:36) [0]

Подскажите знатоки.
Когда я своему CGI приложению (ну на Delphi у меня
приложение) посылаю запрос в виде:
action="cgi-bin/zapros.cgi",
то приложение получает все поля формы,
а если тоже самое пытаюсь сделать через JavaScript:
action="JavaScript:GetZapros();"
<SCRIPT language=JavaScript>
function GetZapros()
{
var resTable="/cgi-bin/zapros.cgi";
parent.resultframe.document.location = resTable;
}
</SCRIPT>
,
то приложение не получает поля от формы.
Как быть в данном случае?


 
Palladin   (2003-02-13 13:48) [1]

скорее всего ты передаешь поля мотодом POST
используй

<form id="_myform" action="cgi-bin/zapros.cgi" method="post" target="твой фрэйм">
лалала и тд

function GetZapros()
{
document.all._myform.Submit();
}


 
Evgeny   (2003-02-13 14:06) [2]

>Palladin © (13.02.03 13:48)
скорее всего ты передаешь поля мотодом POST используй

<form id="_myform" action="cgi-bin/zapros.cgi" method="post" target="твой фрэйм">

точно, так оно и есть

>function GetZapros()
{
document.all._myform.Submit();
}

а это сейчас попробую.


 
Evgeny   (2003-02-13 14:14) [3]

Дело в том, что полученный ответ на запрос нельзя сразу выводить, требуется его предварительно обработать. Моя CGI обрабатывает поля формы, после этого требуется еще послать дальнейший запрос на другой сайт, получить оттуда ответ и дальше его обработать и только после этого выводить, но я не знаю как послать далнейший запрос из моей CGI.


 
Palladin   (2003-02-13 14:35) [4]

если следующий запрос передается методом GET то
Response.SendRedirect

если методом POST то верни такой HTML

<form id="_myform" action="след сервер" method="post">
для всех передаваемых данных вставь такое
<input type="hidden" name="имя" value="значение">
</form>
<script language=javascript>
document.all._myform.Submit()
</script>


 
Evgeny   (2003-02-14 05:13) [5]

>если следующий запрос передается методом GET то
Response.SendRedirect

Как можно послать редирест из CGI не использующей VCL?


 
Palladin   (2003-02-14 05:48) [6]

аж тремя способами

в загловке ответа (302 см. RFC1945,2068, здесь есть перевод 1945 http://maximano.h1.ru/myrfc.htm )


в теге META
<meta http-equiv="Refresh" content="0;url= http://www.microsoft.com/rus/">


и с помощью JavaScript
<script language=javascript>
location.href=" http://www.microsoft.com/rus/";
</script>


 
Evgeny   (2003-02-14 07:02) [7]

> в загловке ответа (302 см. RFC1945,2068, здесь есть перевод
> 1945 http://maximano.h1.ru/myrfc.htm )

к этому сайту никак не удается достучаться.

> и с помощью JavaScript
> <script language=javascript>
> location.href=" http://www.microsoft.com/rus/";
> </script>

Это как? Ведь разговор шел о вызове из CGI?


 
Palladin   (2003-02-14 07:39) [8]


>к этому сайту никак не удается достучаться.

не знаю, я достучался, может я единичный случай :))
вообще полезно RFC читать в оригинале


>Это как? Ведь разговор шел о вызове из CGI?


странно что ты обратил внимание только на третий способ, ибо второй тоже никакого отношения к CGI не имеет.

на самом деле имеет, но косвенно... тоесть твой CGI создает возвращаемый контент такого типа.
Главное, что все это работает, хоть каждый из способов и имеет некоторую долю ненадежности. Самый не надежный это третий, после него идет второй и наконец самый надежный это первый.


 
Evgeny   (2003-02-14 09:06) [9]

>не знаю, я достучался, может я единичный случай :))
>вообще полезно RFC читать в оригинале

К сайту я достучался - прочитал. И понял, что пока ничего не понял. Правда текст сохранил для дальнейшего прочтения и изучения, но пока блуждаю в трех соснах. Если я еще не совсем достал, то объясни или лучше покажи на простейшем примере, как сделать следующее:
1. Запрос посылается методом GET. (с этим понятно, если из формы)
2. Перехватываем ответ. (здесь не въезжаю)
3. Отдаем ответ на растерзание файлу CGI. (тут тоже)
4. Выводим. (здесь ясно на 100%)


 
Palladin   (2003-02-14 09:25) [10]

Объясни толком, что ты пытаешься написать

Я так понял у тебя есть CGI при чем две, и обе твоих, и ты транспортируешь данные и запросы между ними.


 
Evgeny   (2003-02-14 09:34) [11]

CGI у меня одна. Пока. Надеюсь. Задача простая послать запрос на другой сайт и вывести на экран. Все стандарно. Но заказчик пожелал, что бы приходящий ответ был переформатирован по его усмотрению. Отсюда и появились пункты 2 и 3.


 
Palladin   (2003-02-14 09:43) [12]

то есть ты из своей CGI посылаешь тоже по http запрос туда а потом данные принимаешь?

ну и схема...
тогда описаные мной способы тебе не подходят... и редирект тут не причем...
необходимо использовать какойнить компонент для работы с http

1. из твоего CGI послается http запрос на другой сайт
2. проводится парсинг вернувшегося html
3. переформатирование
4. возврат переформатированных данных клиенту


 
Evgeny   (2003-02-14 09:52) [13]

>то есть ты из своей CGI посылаешь тоже по http запрос туда
>а потом данные принимаешь?

Не обязательно из CGI. Я пробовал запрос послать из JavaSсript`а, а ответ записать в переменную с последующей отдачей в CGI. Но тут у меня тоже не получилось.

>необходимо использовать какойнить компонент для работы с http

Подскажи какой клиент этим занимается, хотя придется переходить на VCl.


 
Palladin   (2003-02-14 09:59) [14]

вообщето обычно это не визуальные компоненты...
если не хочешь компоненты то работай на низком уровне, с сокетами... только если опыта работы с ними не имеешь, то лучше уж компоненты, быстрее напишешь...


> Подскажи какой клиент этим занимается, хотя придется переходить
> на VCl.

вкладки FastNet, Indy Clients


 
Evgeny   (2003-02-14 10:07) [15]

То есть с помощью JavaScript я не смогу ответ присвоить переменной, и в дальнейшем передать файлу CGI?


 
Palladin   (2003-02-14 10:09) [16]

нет конечно... каким образом ты это себе представляешь...


 
Evgeny   (2003-02-14 10:19) [17]

Но ведь ответ переменной я присвоить могу. Другой вопрос, я не знаю как это передать дальше. Если бы я мог сохранить в файл, то дальнейшее элементарно. На PHP это можно сделать, но с ним я совсем не в ладу.


 
Palladin   (2003-02-14 10:27) [18]

хотя...
если подумать то при помощи JavaScript можно отрыть новое окно и получить данные из него, передать в свою cgi (postом ессно, ибо я думаю данных будет по горло, а get ограничен 2 килобайтами), закрыть окно... но думаю это будет вообще корявость высшей степени, хотя бы если и открывать окно за пределами экрана...
кроме того в данном способе будет ограничена бровзерная совместимость... так что даже не стоит копать в сторону JavaScript...


 
Palladin   (2003-02-14 10:29) [19]

не понимаю...
каким это образом ты ответ переменной в JavaScript присваиваешь...
запости сюда код, мне аж интересно стало :)


 
Evgeny   (2003-02-14 11:00) [20]

<SCRIPT language=JavaScript>
function GetFindResult()
{
var counts="<img src="cgi-bin/counter.cgi?bkcolor=16777215&x1=55&y1=2&x2=55&y2=15&size=6">";
if(document.all) document.all.cnts.innerHTML = counts;

if(document.layers)
{
var neww = window.open("", "neww");
neww.document.write(counts);
neww.document.close();
var counts="";
}
}
</SCRIPT>

таким образом у меня на одном из сайте работает счетчик посещений.


 
Palladin   (2003-02-14 11:09) [21]

а, ну да, понятно :)
это я и описал в своем предыдущем посте...

ну в общем для массива данных это не дело, но выбор твой... поступай как знаешь...


 
Evgeny   (2003-02-14 11:47) [22]

Ну дак переменную я получил, а что с ней дальше делать?


 
Palladin   (2003-02-14 12:03) [23]

что хочеш...
можешь прямо JavaScriptом форматировать... (хемморой)
можешь отправить постом своему CGI

<form id="_submitdata" action="блабла" method="post">
<input type="hidden" id="_data" name="_data" value="">
</form>
<script language=javascript>
function sendForFormat()
{
// получение данных в какуюнить переменную
document.all._data.value=каканить переменная;
document.all._submitdata.Submit();
}
</script>


в своем CGI получаешь эти данные

var
Data:TStringList;
....
Data.Text:=Request.ContentFields.Values["_data"];


проводишь парсинг, форматирование
и отправляешь обратно клиенту


Response.Content:=ReFormatedData.Text;


усе


 
Evgeny   (2003-02-14 12:32) [24]

>document.all._data.value=каканить переменная;
>document.all._submitdata.Submit();

Вот этих двух строчек мне и не хватало для полного счастья. Спасибо за терпение и помощь.


 
Evgeny   (2003-02-14 13:50) [25]

var result=" http://www.site.ru/script.asp?val1=1&val2=2&val3=3";
возвращает строку, а
var result=location=" http://www.site.ru/script.asp?val1=1&val2=2&val3=3";
выводит без предупреждения.


 
Palladin   (2003-02-14 14:06) [26]

это вопрос или утверждение?


 
Evgeny   (2003-02-14 14:11) [27]

к сожалению вопрос


 
Palladin   (2003-02-14 14:17) [28]

и в чем он интересно заключается, и опиши что ты хочешь конкретно сделать?


 
Evgeny   (2003-02-14 14:21) [29]

Я уже подпрыгиваю, сижу и безпрестанно жму F5.

Когда я работаю со строкой типа:
var counts="<img src="cgi-bin/counter.cgi?bkcolor=16777215&x1=55&y1=2&x2=55&y2=15&size=6">";
в переменную загружается результат запроса. А вот в ту переменную, что я объявляю в функции мой запрос результата не отдает. Либо получаю строку, либо сразу вывод на экран.


 
Palladin   (2003-02-14 14:33) [30]

когда ты пишеш var counts="блабла"
в переменную не загружается результат запроса... тут ты ошибаешься... в переменную заносится строка

сейчас я обратил внимание на твой пример кода в котором ты якобы получаешь значение счетчика... на самом деле ты ничего неполучаешь кроме строки html тэга img
просто эта строка в открываемом окне динамически вставляет картинку в открываемое окно...
что бы получать истинное значение вернувшегося html кода по запросу надо обратится к помощи DOM, этим я не занимался и ничем помоч не могу... а разбиратся не хочется... обратись к помощи знатоков DHTML и различных уровней DOM или сам почитай RFC по этому вопросу...

подозреваю что то типа такого document.body.innerHTML :)


 
Evgeny   (2003-02-14 14:45) [31]

var counts="<img src="cgi-bin/counter.cgi?bkcolor=16777215&x1=55&y1=2&x2=55&y2=15&size=6">";

Эта строка реально работает можешь поэкспериментировать. Картинка обновляется если првязать ее например к кнопке. Не перегружая страницу. Дальше естественно идет следующая строка:

if(document.all) document.all.cnts.innerHTML = counts;




 
Palladin   (2003-02-14 14:53) [32]

передай содержание counts к себе в CGI программу и увидишь что это на самом деле...


 
Evgeny   (2003-02-14 15:02) [33]

Ну ведь должен быть какой-то выход? Ладно - буду искать дальше. Самое обидное, что я знаю сайт где такое делается, но...



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.009 c
14-5847
xoxol
2003-02-11 06:27
2003.03.03
FORMAT C:


6-5694
Nikk085
2003-01-12 17:48
2003.03.03
Проблемма соединения через инет!


8-5669
JibSkeart
2002-11-21 18:06
2003.03.03
Кто нибуть работал с частичками(particles) в DirectX


14-5710
alex_bredin
2003-02-12 10:41
2003.03.03
InstallShield Express for Delphi 6


1-5511
Tornado
2003-02-20 19:07
2003.03.03
Про INI-файлы, помогите





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский