powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Перестают работать вызовы #server()#
25 сообщений из 33, страница 1 из 2
Перестают работать вызовы #server()#
    #37867535
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с непонятной для меня проблемой.
Есть страница, куча джаваскрипт функций:
самая первая функция, в которой используется #server()# отрабатывает всегда без проблем.
Затем по клику пользователя вызывается вторая функция в которой используется #server()#. Так вот на второй функции иногда перестает срабатывать вызов #server()#. Т.е. обновил страницу - первый вызов ОК, следующий не работает. Опять обновил - может сработать второй вызов, а может и нет. В фаербаге мозилы можно увидеть в этом случае такою ошибку:
Код: javascript
1.
2.
obj.startEvent is not a function
obj.startEvent(cookie, method);                                 cspbroker.js (строка 249)


Происходит это внутри следующей функции в файле cspbroker.js
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
function cspIntRunServerMethod(method, args)
{
var arg;
var obj = cspFindBroker();
if (null == obj) {
err='Unable to locate CacheCSPBroker applet!'
// Allow caller to override our error handling
if (typeof cspRunServerMethodError == 'function')
return cspRunServerMethodError(err);
alert(err);
return null;
}
var cookie = cspFindCookie('CSPSESSIONID');
// If Mozilla for Mac, then indicate to applet that cookie
// must be explicitly added to work around bug.
if (cookie != null) {
if (-1 != navigator.appVersion.indexOf("Macintosh")) {
cookie = '+' + cookie;
}
}
obj.startEvent(cookie, method);
for (var i = 1; i < args.length; i++) {
arg = args[i];
if (typeof arg != "object") {
// Convert boolean to Cache value before sending
if (typeof arg == "boolean") arg = cspMakeBoolean(arg);
// Force arg to string to work around IE problem
// with passing empty form text field. There is a problem with Sun JVM 1.2
// when you pass '' it takes this as null. So to hack around this bug we
// call the addNullStringParam method rather than addParam!
if ((typeof arg == "string") && (arg == '')) {
obj.addNullStringParam();
} else {
if (typeof arg == "number") {
arg = arg.toString();
} else if ((arg != null) && (arg.length > 32000)) {
alert( 'Argument ' + i + ' too long.');
}
obj.addParam(arg);
}
} else {
// If array, then create placeholder and add each element
obj.addVector();
for (var el in arg) {
obj.addElement(arg[el]);
}
}
}
var r = obj.doEvent();
var js = new String(obj.getJS());
var err = new String(obj.getBrokerError());
// Allow caller to override our error handling
if ((err.length > 0) && (typeof cspRunServerMethodError == 'function')) {
return cspRunServerMethodError(err)
}
if (err.length > 0) {
js = 'alert(\'An error occurred while processing an event\\n\\n' + err + '\');';
}
if (js.length > 0) {
var bidding = new Function('CSPPage', js);
bidding(self);
}
// In Java plug-in 1.4.1, Java method may return value of type object rather than string.
// Workaround this problem by forcing to string
if (typeof r == "object") r = r + "";
return r;
} 


может кто знает в чем может быть проблема? Почему первая срабатывает всегда, а вторая периодически не срабаывает после перезагрузки страницы.
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37867653
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите содержимое метода, который выполняете. Есть подозрение, что оно что-то портит в шлюзовом процессе.
А может даже и не оно.
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37867694
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.Покажите содержимое метода, который выполняете. Есть подозрение, что оно что-то портит в шлюзовом процессе.
А может даже и не оно.

Выполняемый метод достаточно прост:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<script language="cache" method="SelectDevice" arguments="Device">
S $zt="ERR5"	
	s ^ASTUPRSHDATA=Device
	s devNum=""
	f  {
		s devNum=$O(^ASTUPRSHDATA(Device,devNum)) q:devNum=""
		s nz=""
		f  {
			s nz=$O(^ASTUPRSHDATA(Device,devNum,nz)) q:nz=""
			s para1=$P(^ASTUPRSHDATA(Device,devNum,nz),"\",1)
			s para2=$P(^ASTUPRSHDATA(Device,devNum,nz),"\",2)
			s $P(params,"_",1)=devNum
			s $P(params,"_",2)=para1
			s $P(params,"_",3)=para2
			s html="<li params='"_params_"'>"_^DEVICE(Device)_" "_devNum_"<span class='para'>("_para1_"-"_para2_")</span>"		
			&js<$("#allUstrList ul").append("#(html)#");>
		}
	}
	Q
:ERR5
	S $ZT=""
	D BACK^%ETN
	Q
</script>


а может это быть связано с тем, что в первом методе (успешном) выполняется такой код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
        Set httprequest=##class(%Net.HttpRequest).%New() 
	Set httprequest.Server=server //IP адрес, куда будет направлен запрос
	Set httprequest.Port=80 //порт сервера, обычно 80, но может быть и другим		
	
	/* добавление параметров в запрос */
	Do httprequest.InsertFormData("rsh",RSH)	
	
	Do httprequest.Get(URL)			
	s response=httprequest.HttpResponse
	i response.StatusCode'=200 {		
		q "1\HTTP RESPONSE:"_response.StatusCode
	}	
	
	;получаем ответ
	s data=response.Data.Read(response.Data.Size) 	
	
	;читаем XML
	set sc=##class(%XML.TextReader).ParseString(data,.reader) 	
       ;парсинг XML
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37867786
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, у вас разные методы. Я сначала подумал, что вы два раза один и тот же вызываете.
Да, смотреть надо в первую очередь "успешный" метод. Можно его код?

Интересны обращения к внешним объектам типа %response, %session и т.д., изменения системных перемменных, точки выхода, что оно возвращает и что пишет в устройство вывода по умолчанию.

Я так понимаю, в целом у вас система работает нормально, сбоит только это место?
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37867830
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, 2 разные функции. Сбоит ИНОГДА (не всегда) после перезагрузки страницы второй метод.
Успешный метод:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
s $ZT="err2"	
k ^ASTUPRSHDATA
s DEVICE("*")="Шкаф"
s DEVICE(0)="Ведомст."
s DEVICE(1)="Громоотвод"
s DEVICE(2)="Гром. парал."
s DEVICE(3)="РБ"
s DEVICE(4)="IIклР"
s DEVICE(5)="II*кл"
s DEVICE(6)="IIклМ"
s DEVICE(7)="НЕИЗВЕСТНОЕ УСТРОЙСТВО"
s DEVICE(8)="Стрипс"
s DEVICE(9)="Рамка"
s DEVICE(10)="*Стрипс"

s res=$$^ASTUPRSH(rsh)
s kod=$P(res,"\",1)
s msg=$P(res,"\",2)
i (kod=0){
	s nz=""
	f  {
		s nz=$O(^ASTUPRSHDATA(nz)) q:nz=""
		s devName=DEVICE(nz)
		s html="<option value='"_nz_"'>"_devName_"</option>"
		&js<$("#astup_device").append("#(html)#");>	
	}		
}
q res

:err2
	s $ZT=""
	d BACK^%ETN
	q "1\Программная ошибка при получении информации . Работу можно продолжить, но обратитесь к программистам."	


в нем вызывается другой метод ^ASTUPRSHDATA
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
ASTUPRSH(RSH)

	s $ZT="err"
	k ^ASTUPRSHDATA
	
	s server="10.248.4.14"	
	s URL="/csp/work/tmtest.csp" //адрес страницы, куда отправляется запрос		
	Set httprequest=##class(%Net.HttpRequest).%New() 
	Set httprequest.Server=server //IP адрес, куда будет направлен запрос
	Set httprequest.Port=80 //порт сервера, обычно 80, но может быть и другим		
	
	/* добавление параметров в запрос */
	Do httprequest.InsertFormData("rshNum",RSH)	
	
	Do httprequest.Get(URL)			
	s response=httprequest.HttpResponse
	i response.StatusCode'=200 {		
		q "1\HTTP RESPONSE:"_response.StatusCode
	}	
	
	;получаем ответ
	s data=response.Data.Read(response.Data.Size) 	
	
	;читаем XML
	set sc=##class(%XML.TextReader).ParseString(data,.reader) 	
	
	;читаем результат ответа от АСТУП 	
	s count=0
DEVICE
	s count=count+1	
	s res=reader.ReadStartElement("device")
	if res=0 g END
	d reader.ReadStartElement("deviceType")
	d reader.Read()
	s type=reader.Value	
	
	d reader.ReadStartElement("deviceNum")
        d reader.Read()
	s num=reader.Value	
	
	d reader.ReadStartElement("devicePara1")
        d reader.Read()
	s para1=reader.Value	
	
	d reader.ReadStartElement("devicePara2")
        d reader.Read()
	s para2=reader.Value	
	
	s lastNZ=$O(^ASTUPRSHDATA(type,num,""),-1)+1
	s ^ASTUPRSHDATA(type,num,lastNZ)=para1_"\"_para2
	g DEVICE	
END
	Q 0
err
	s $ZT=""
	d BACK^%ETN
	q "1\Программная ошибка при обработке XML. Обратитесь к программистам."
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37868194
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока особо версий нет.
Только в первом методе порекомендую, чтобы quit что-то возвращал. Где-то по форуму проскакивала информация, что гиперевенты без возврата чем-то чреваты.

А обработчик ошибок не попадает никогда?
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37868427
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,
Первый метод как раз таки возвращает значение, не возвращает второй. Но заметил, что если в первом (успешном) методе тупо сделать 1 строку кода q 0, то неуспешный метод сбоит намного чаще. В обработчик ошибок ничего не попадает, т.к. метод вроде бы и не вызывается. В общем непонятная фигня, буду экспериментировать дальше :( раньше все прекрасно работало, чуть что переделаю на обычный ajax.
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37868538
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит, сделайте, чтобы второй возвращал что-то :-)
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37868539
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В логе веб-сервера ошибок нет?
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37868665
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,
Все сделал, даже сделал чтобы абсолютно ВСЕ методы возвращали q "0".
Но вроде бы нашел причину. У меня второй (неуспешный) метод вызывается при изменении выбора в select box. Так вот этот select box изначально скрыт (display:none) и отображается после выполнения первого метода. НО если сделать его видимым изначально, то ошибка пока не воспроизводится!!! Вот это мне вообще не понятно :( Т.е. как показывают опытные тесты при скрытом боксе ошибка воспроизводится где-то после 3-5 обновления страницы, при видимом боксе ошибка пока не воспроизводилась.
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37868718
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewQwer , видимость/не_видимость элемента ДОМ никак не может влиять на именно вызов #server()#...

Как вариант, просто писать "трассировку" в некий глобал, т.о. ты сможешь посмотреть:
- попадаешь ли вообще "в #server()#";
- какие "блоки" таки выполнились.

Т.е. начни выполнять тестирование содержимого #server()#.
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37868725
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewQwerВыполняемый метод достаточно прост:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<script language="cache" method="SelectDevice" arguments="Device">
S $zt="ERR5"	
	s ^ASTUPRSHDATA=Device
	s devNum=""
	f  {
		s devNum=$O(^ASTUPRSHDATA(Device,devNum)) q:devNum=""
		s nz=""
		f  {
			s nz=$O(^ASTUPRSHDATA(Device,devNum,nz)) q:nz=""
			s para1=$P(^ASTUPRSHDATA(Device,devNum,nz),"\",1)
			s para2=$P(^ASTUPRSHDATA(Device,devNum,nz),"\",2)
			s $P(params,"_",1)=devNum
			s $P(params,"_",2)=para1
			s $P(params,"_",3)=para2
			s html="<li params='"_params_"'>"_^DEVICE(Device)_" "_devNum_"<span class='para'>("_para1_"-"_para2_")</span>"		
			&js<$("#allUstrList ul").append("#(html)#");>
		}
	}
	Q
:ERR5
	S $ZT=""
	D BACK^%ETN
	Q
</script>


А так лучше вообще не делать.
Оставь Кащею - кащеево, а скрипру - скриптовое...
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37868729
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa AndrewQwer , видимость/не_видимость элемента ДОМ никак не может влиять на именно вызов #server()#...

Как вариант, просто писать "трассировку" в некий глобал, т.о. ты сможешь посмотреть:
- попадаешь ли вообще "в #server()#";
- какие "блоки" таки выполнились.

Т.е. начни выполнять тестирование содержимого #server()#.

А вот как оказывается влияет! Пока с видимым элементом изначально не возникает этой ошибки. С невидимым изначально - пару попыток достаточно, а может и с первой попытки возникнуть глюк. Какую трассировку в глобал писать, если ошибка возникает еще на этапе javascritpt! Во ВСЕХ методах у меня единственная строчка кода
Код: c#
1.
q "0"


Что тут проверять можно? )))
до серверного метода дело даже не доходит!
Это джаваскрипт ошибка, а не серверная.
Код: c#
1.
2.
obj.startEvent is not a function
obj.startEvent(cookie, method);                                 cspbroker.js (строка 249)
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37868734
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaА так лучше вообще не делать.
Оставь Кащею - кащеево, а скрипру - скриптовое...
Ну может лучше и не делать, но возможность в языке-то есть :)
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37869865
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewQwerНу может лучше и не делать, но возможность в языке-то есть :)
Пришел как-то участковый к мужику и нашел самогонный аппарат...
- Сейчас буду оформлять штраф за продажу самогонки!
- Но я не продавал!
- А аппарат-то имеется.
- Тогда арестовывай меня за изнасилование...
- Кого изнасиловал?
- Пока никого... Но аппарат-то имеется!

Не стоит рыть подземный ход на чердак.
Сервер работает с данными, клиент с ДОМом...
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37869867
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewQwerдо серверного метода дело даже не доходит!
Тогда пиши в ИС...
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37869928
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaСервер работает с данными, клиент с ДОМом...
Вы сами себя очень сильно ограничиваете. Передача через возврат и имеет ограничения по объему данных, а так - нет.
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37879874
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Вы сами себя очень сильно ограничиваете.
Я никогда себя не ограничиваю чем-то путним...

Если уш гипперэенты, тот же Даймор придал анафеме, то эти "вставки" JS в кащейском коде вовсе ерунда какая-то...
Чистый популизм - де у нас и такое есть!

Блок А.Н.Передача через возврат и имеет ограничения по объему данных, а так - нет.
Не совсем понимаю что это за страница такая, что ей нужен какой-то оооогромный объем данных. У меня не будет таких страниц никогда.
Я все это буду разбивать на куски...


Но в любом случае как делать решеть каждому.
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37880380
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaЯ никогда себя не ограничиваю чем-то путним...
эти "вставки" JS в кащейском коде вовсе ерунда какая-то...
Эти "вставки" - всего лишь макрос языка, который при компиляции
превращается в команду write c квотированием переданного кода в формате js.
Его удобно применять когда на страницу надо вывести часть js-скрипта, не заботясь о квотировании.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Class wui.page Extends %CSP.Page {

ClassMethod OnPage() as %Status {
 &html<<!doctype html><html lang="ru"><head><meta charset="utf-8"></head><body>>
 w "<script>"
 f i=1:1:3 {
	 &js<alert('Сергей Батькович "НИКОГДА" ""не ограничивает"" себя чем-то """путним""".'
			+ "\n Он 'ВСЕГДА' непредвзято относится к мнению 'собеседника' " 
			+ '\n и "не торопится" с выводами'
	 );>
 }
 w "</script>"	
 &html<</body></html>>
 Q $$$OK
}

}
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37880992
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint , я все это знаю...
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37882076
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня сам столкнулся с такой же проблемой...

Не работает даже тестовая страница

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<html>
<head>
<title>Test</title>
<script type='text/javascript'>
function test() {
	var val;
	alert(1);
	val=#server(..cTest('test'))#
	alert(val);
	alert(2);
}
</script>

<csp:method name="cTest" arguments="Val:%String" returntype="%String">  
    s ^tmpKSA=Val
    q "save"
</csp:method>

</head>
<body>
<button onclick='test()'>Test</button>
</body>
</html>



Вот картинка настроек CSP...
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37882081
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия Кащея
Код: vbnet
1.
Cache for Windows (x86-64) 2012.1.1 (Build 602) Wed Mar 7 2012 22:36:34 EST
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37882111
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa ,

Код: plaintext
1.
2.
3.
Имя веб-приложения: /test
Веб-сервер: Apache 2.2.22
$zv: Cache for Windows (x86-64) 2012.2 (Build 612_1U)

Полёт нормальный.
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37882164
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitПолёт нормальный.
Вот и я ожидал такое...

Только я вижу алерт с 1 и потом ошибку в браузере
...
Рейтинг: 0 / 0
Перестают работать вызовы #server()#
    #37882167
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitВеб-сервер: Apache 2.2.22
Пойду узнаю у местных что у них установлено...
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Перестают работать вызовы #server()#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]