YarrowSoft

Архив : Re: [cache_ru] CSP: можно ли из cache'-метода вызвать js-функцию и получить её код возврата ? : группа пользователей постреляционной СУБД Cache


[Предыдущее - [cache_ru] JDBC как установить charset] [Следующее - Re: [cache_ru] CSP: можно ли из cache'-метода вызвать js-функцию и получить её код возврата ?]


Письмо #5089

Тема: Re: [cache_ru] CSP: можно ли из cache'-метода вызвать js-функцию и получить её код возврата ?
Начало этой темы: [cache_ru] CSP: ЛНФМН КХ ХГ cache'-ЛЕРНДЮ БШГБЮРЭ js-ТСМЙЖХЧ Х ОНКСВХРЭ Е╦ ЙНД БНГБПЮРЮ ?
Это ответ на: Re: [cache_ru] CSP: можно ли из cache'-метода вызвать js-функцию и получить её код возврата ?
Ответ на это письмо: Re: [cache_ru] CSP: можно ли из cache'-метода вызвать js-функцию и получить её код возврата ?
От: Dmitry V. Liseev Дата: 12 Апреля 2006 02:32

----- Original Message -----
From: "logist" <E-Mail>
To: <E-Mail>
Sent: Monday, April 10, 2006 5:14 AM
Subject: Re: [cache_ru] CSP: можно ли из cache'-метода вызвать js-функцию и
получить её код возврата ?

Hi!

>  > Вопрос: можно ли вызвать из CSP-метода mySrvMethod JS-функцию dummy и
>  > получить её код возврата (someRetCode) ?
> Нет, нельзя. Все вычисления в javascript необходимо провести до вызова
> серверного метода, и потом передать результаты в качестве параметров.

На самом деле не совсем так. Просто кашешный метод исполняется
на сервере. А яваскриптовская функция - в браузере на клиенте.

Можно, как и было сказано, вызвать из клиента серверную функцию.
А можно и из серверной функции вызвать клиентскую. Вот только
код возврата по-людски получить не получится. Но если очень
хочется не по-детски извратится, то почему бы и нет:

<html>

<script Language="Cache" Method="mySrvMethod1"
Arguments="Body:%String">
#; Метод считает длину текста и количество строк
#; и сохраняет эти данные в сессии. Вызывает клиентскую
#; функцию для подсчета средней длины строки.
New Lines, Length
Set Lines = $Length(Body,$c(13))
Set Length = $Length(Body)
&js<average(#(Length)#,#(Lines)#);>
#; Обращаем внимание, что скрипт передается на клиента
#; только после возврата из серверного метода и фактическое
#; выполнение ява-скрипта произойдет после завершения метода,
#; независимо от того, где внутри метода расположен код &js<>
Set %session.Data("Lines") = Lines
Set %session.Data("Length") = Length
</script>

<script Language="Cache" Method="mySrvMethod2"
Arguments="Average:%Float" returntype="%String">
#; Метод получает от клиентской функции среднюю длину строки,
#; извлекает остальные данные из сессии и формирует текстовый
#; результат.
New Result
Set Result="Общая длина текста :"_$Get(%session.Data("Length"))
Set Result=Result_$c(13)_"Количество строк :"_$Get(%session.Data("Lines"))
Set Result=Result_$c(13)_"Средняя длина строки :"_Average
Quit Result
</script>

<script Language=JavaScript>
function average(Length,Lines){
// Функция подсчитывает среднюю длину строки, вызывает
// серверный метод для формирования текстовой строки
// и выводит результат.
alert(#server(..mySrvMethod2(Length / Lines))#);
}
</script>

<script Language=JavaScript>
function ExecuteTest(){
// Функция вызывает серверный метод, передавая ему введенный
// пользователем текст.
#server(..mySrvMethod1(self.document.MyForm.Body.value))#;
}
</script>

<body>

<form name="MyForm">
<textarea name="Body" rows="15" cols="60"></textarea>
<input Type="button" Value="Статистика" OnClick = "ExecuteTest()">
</form>

</body>
</html>
____________________________
С уважением, Лисеев Дмитрий.

http://private.peterlink.ru/dimik/

PGP key fingerprint: 09 28 74 28 6C 39 62 29   2E CB 95 03 4F 04 33 73


[2000|2001|2002|2003|2004|2005|2006|2007|2008] [Январь|Февраль|Март|Апрель|Май|Июнь]
[01|02|03|04|05|06]