Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Перестают работать вызовы #server()# / 25 сообщений из 33, страница 1 из 2
05.07.2012, 13:42
    #37867535
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
Столкнулся с непонятной для меня проблемой.
Есть страница, куча джаваскрипт функций:
самая первая функция, в которой используется #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
05.07.2012, 14:35
    #37867653
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
Покажите содержимое метода, который выполняете. Есть подозрение, что оно что-то портит в шлюзовом процессе.
А может даже и не оно.
...
Рейтинг: 0 / 0
05.07.2012, 14:53
    #37867694
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
Блок А.Н.Покажите содержимое метода, который выполняете. Есть подозрение, что оно что-то портит в шлюзовом процессе.
А может даже и не оно.

Выполняемый метод достаточно прост:
Код: 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
05.07.2012, 15:26
    #37867786
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
А, у вас разные методы. Я сначала подумал, что вы два раза один и тот же вызываете.
Да, смотреть надо в первую очередь "успешный" метод. Можно его код?

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

Я так понимаю, в целом у вас система работает нормально, сбоит только это место?
...
Рейтинг: 0 / 0
05.07.2012, 15:41
    #37867830
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
Да, 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
05.07.2012, 18:38
    #37868194
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
Пока особо версий нет.
Только в первом методе порекомендую, чтобы quit что-то возвращал. Где-то по форуму проскакивала информация, что гиперевенты без возврата чем-то чреваты.

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

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

Т.е. начни выполнять тестирование содержимого #server()#.
...
Рейтинг: 0 / 0
06.07.2012, 10:39
    #37868725
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
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
06.07.2012, 10:40
    #37868729
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
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
06.07.2012, 10:41
    #37868734
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
krvsaА так лучше вообще не делать.
Оставь Кащею - кащеево, а скрипру - скриптовое...
Ну может лучше и не делать, но возможность в языке-то есть :)
...
Рейтинг: 0 / 0
07.07.2012, 00:10
    #37869865
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
AndrewQwerНу может лучше и не делать, но возможность в языке-то есть :)
Пришел как-то участковый к мужику и нашел самогонный аппарат...
- Сейчас буду оформлять штраф за продажу самогонки!
- Но я не продавал!
- А аппарат-то имеется.
- Тогда арестовывай меня за изнасилование...
- Кого изнасиловал?
- Пока никого... Но аппарат-то имеется!

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

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

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


Но в любом случае как делать решеть каждому.
...
Рейтинг: 0 / 0
16.07.2012, 11:35
    #37880380
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
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
16.07.2012, 17:12
    #37880992
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
doublefint , я все это знаю...
...
Рейтинг: 0 / 0
17.07.2012, 12:59
    #37882076
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестают работать вызовы #server()#
Сегодня сам столкнулся с такой же проблемой...

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

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

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

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

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


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