|
CSP. JSON.
|
|||
---|---|---|---|
#18+
Посмотрел в этом форуме статьи про JSON в CSP. Но ничего путного не нашел. Есть ли в Cache адаптер JSON для CSP? Может у кого-то свои собственно ручно сделанные адаптеры. Поделитесь, плз. Когда через Аякс посылаю запрос Cache: data: в формате JSON. Он понимает данные ввиде: "имя":"значение". Но не понимает массивы. P.S. Если вопрос не слишком корректен не пинайте сильно, пожалуйста. Думаю смысл вопроса понятен. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 09:23 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
Darkhan Darkhan , чем провинились гипперэвенты? Почему не используешь их? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 09:41 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
Darkhan Darkhan , Bill McCormickIf all you want is to mess with JSON then you can use the lowlevel APIs in the JSON Provider class. There are functions to convert arrays or objects in to JS that will instantiate a JSON object. And there are others that will take a JSON object from JS and convert it to an array in memory in COS. If that is all you are after have at it. Источник: zen.component on csp.page %ZEN.Auxiliary.jsonProvider ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 09:44 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
ZEN JSON, работает только в одну сторону, и выводит JSON в текущий поток попробуйте это , у себя использую его. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 09:53 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
DAiMor, почему только в одну сторону? В коде класса %ZEN.Auxiliary.jsonProvider есть внутренние методы %ObjectToJSON и %ParseJSON. Правда нет уверенности, что реализация совпадает со стандартом ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 10:44 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
Darkhan Darkhan, кстати метод %ArrayToJSON там тоже есть ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 10:46 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
Ещё много методов " Low Level JSON Support " можно найти в файле zenCSLM.js . ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 11:06 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
ДокументацияThe Zen <jsonProvider> component provides a way to transport object data between a server and client , or between client and server , using JavaScript Object Notation (JSON) format. Источник: Zen JSON Component И ещё (ссылку приводил выше): The jsonProvider component provides a way to transport object data between a server and client ( and vice versa ) using JavaScript Object Notation (so-called JSON format). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 11:16 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
Всем спасибо за отзывчивость. Сейчас рассмотрю предложенные варианты. Но мне нужно использовать это в CSP (не ZEN). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 11:25 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
Darkhan DarkhanНо мне нужно использовать это в CSP (не ZEN). Так чем не угодили гиппер эвенты? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 13:34 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
krvsaDarkhan DarkhanНо мне нужно использовать это в CSP (не ZEN). Так чем не угодили гиппер эвенты? гипер евенты много чем могут не угодить, да и связь какая между JSON и HyperEvent ? для гипер евентов нужно, держать настроенной область csp, а когда для безопасности хочется все прикрыть приходится выделываться. при переходе с 2008 на 2010. возникла проблема, клиентам приходилось вымудрятся с настройкой IIS (Apache), да и мне самому на разработческой машине. настраивать так чтобы не пересекалась папка CSP для разных версий Cache, так как гиперевенты там не совместимы. И у меня в своем приложении тоже есть желание напрочь отказаться от использования гиперевентов. а еще сложность отладки, сложно понять по вызову гиперевента куда он все таки уйдет (класс, метод) в общем я для себя решил что гиперевенты-зло, и ни кому бы не советовал их использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 13:44 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
DAiMorв общем я для себя решил что гиперевенты-зло, и ни кому бы не советовал их использовать. Х/з за что ты так на них жлобанул... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 13:57 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
DAiMorсвязь какая между JSON и HyperEvent ? Суть одна... Передача/получение данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 14:00 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
krvsaDAiMorсвязь какая между JSON и HyperEvent ? Суть одна... Передача/получение данных. тогда встречный вопрос, как организовать передачу/возврат гиперевентами сложных структур данных: объект с несколькими свойствами, некоторые свойства которого могут быть массивами? и еще чтобы было просто получить на любой из сторон (сервер/клиент), удобный формат для обработки ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 15:15 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
Не самый лучший способо, наверно, но я записью в текущее устройство вывода внутри гиперевента формирую яваскрипт. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 15:49 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
DAiMorкак организовать передачу/возврат гиперевентами сложных структур данных: объект с несколькими свойствами, некоторые свойства которого могут быть массивами? и еще чтобы было просто получить на любой из сторон (сервер/клиент), удобный формат для обработки Я делаю так. С клиента передаю на сервер (гиперивентом) указатель на объект DOM (js). Методом сервера (посредством &js<>) наполняю мой переданный js объект данными и поведением любой сложности, доступной в рамках js и DOM. Возвращаю на клиент "пусто" (или ошибку, если что-то пошло не так). В итоге, сразу после выполнения метода на стороне сервера имею на клиенте объект, содержащий сколь угодно сложную структуру (к примеру со свойством, представляющим из себя массив объектов, каждый из которых содержит набор массивов данных и т.д. и т.п. + измененное в соответствии с инструкциями сервера поведение объекта на странице - новые и измененные методы). ЗЫ: Это не к тому, что JSON - плохо. Скорее наоборот - очень удачная идея, считаю. Так же как и вообще REST, который уже кажется всем показал, как нас смешно развели когда-то с xml, soap, wsdl etc. Ведь повелись в свое время - как кролики. Нет бы стандарты читать и использовать ;) И вообще, вот это "Суть одна... Передача/получение данных." наводит на размышления о том, почему клавиш 104, монитор квадратный, и рук две - "суть"-то одна - никем не доказано, что треугольный монитор не дает возможности работать с гуи... но, почему-то таковых не наблюдается, а вот изыски в изготовлении софта, в т.ч. способов "передачи/получения данных", изобилуют ;) Так что, имхо, суть далеко не одна... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 15:50 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
Darkhan DarkhanВсем спасибо за отзывчивость. Сейчас рассмотрю предложенные варианты. Но мне нужно использовать это в CSP (не ZEN). doublefint привёл некоторые методы из класса %ZEN.Auxiliary.jsonProvider , которые можно вызывать из CSP, например: Пример на ZENClass SqlRu.test Extends %ZEN.Component.page { /// Comma-separated list of additional JS include files for the page. Parameter JSINCLUDES As STRING = "zenCSLM.js"; XData Style { <style type="text/css"> /* establish size of finder */ #finder { border: 1px solid black; width: 900px; height: 400px; overflow-x: auto; overflow-y: hidden; background: rgb(180,190,200); } /* fix width/height of each finder column */ .finderColumn { width: 300px; height: 400px; } </style> } XData Contents [ XMLNamespace = " http://www.intersystems.com/zen" ] { <page xmlns=" http://www.intersystems.com/zen" title="" height="100%"> <jsonProvider id="json" OnGetArray="GetFinderArray"/> <finderPane id="finder" ongetdata="return zen('json').getContentObject();"/> <button caption="test" onclick="zenPage.test();"/> </page> } ClientMethod test() [ Language = javascript ] { zenAlert(ZLM.jsonEncode(zen('json').getContentObject())); } /// Provide the source data (as an array) that will drive the finder. Method GetFinderArray( ByRef pParameters, Output pMetaData, Output pData) As %Status { // The MetaData list specifies the names of the properties of the // JavaScript objects and the order in which they appear within // nodes of the data array. Set pMetaData = $LB("name","title","supervisor","phoneNo") // create a random org chart Set d = 0 For tDept = "Sales","Marketing","Engineering","HR","Finance" { // add top-level entry for each department Set d = d + 1 Set pData(d) = $LB(tDept) // name, but no other properties // add executive to each dept Set tVPName = ##class(%PopulateUtils).Name() Set pData(d,1) = $LB(tVPName,"Vice President, "_ tDept) // add 2nd level managers For n = 1:1:($R(10)+2) { Set tMgrName = ##class(%PopulateUtils).Name() Set pData(d,1,n) = $LB(tMgrName,"Manager",tVPName) // add workers For w = 1:1:($R(25)+2) { Set tWkrName = ##class(%PopulateUtils).Name() Set tTitle = ##class(%PopulateUtils).Title() Set pData(d,1,n,w) = $LB(tWkrName,tTitle,tMgrName) } } } Quit $$$OK } } Аналог на CSP<CSP:CLASS INCLUDES="%callout"> <html> <head> <title></title> <script type="text/javascript" src="zenutils.js"></script> <script type="text/javascript" src="zenCSLM.js"></script> <script language="cache" method="GetFinderArray" arguments="&pMetaData,&pData" returntype="%Status"> new d,tDept,tVPName,n,tMgrName,tWkrName,tTitle // The MetaData list specifies the names of the properties of the // JavaScript objects and the order in which they appear within // nodes of the data array. Set pMetaData = $LB("name","title","supervisor","phoneNo") // create a random org chart Set d = 0 For tDept = "Sales","Marketing","Engineering","HR","Finance" { // add top-level entry for each department Set d = d + 1 Set pData(d) = $LB(tDept) // name, but no other properties // add executive to each dept Set tVPName = ##class(%PopulateUtils).Name() Set pData(d,1) = $LB(tVPName,"Vice President, "_ tDept) // add 2nd level managers For n = 1:1:($R(10)+2) { Set tMgrName = ##class(%PopulateUtils).Name() Set pData(d,1,n) = $LB(tMgrName,"Manager",tVPName) // add workers For w = 1:1:($R(25)+2) { Set tWkrName = ##class(%PopulateUtils).Name() Set tTitle = ##class(%PopulateUtils).Title() Set pData(d,1,n,w) = $LB(tWkrName,tTitle,tMgrName) } } } /* или Set pMetaData = $LB("name","rank","serialNo") Set pData(1) = $LB("Smith","Captain","444-33-2222") Set pData(1,1) = $LB("Jones","Corporal","333-22-3333") */ Quit $$$OK </script> <script language="cache" method="SrvTest" returntype="%String"> new format,tIO,tXDEV,export,tChunk do ..GetFinderArray(.pMetaData,.pData) // собираем в строку всё, что выводится через write set tIO=$IO,tXDEV="|XDEV|"_+$JOB,$ZT="Trap" Do { /// For $$$IsUnicode use UTF-8 Open tXDEV:($ZF(-6,$$$XSLTLibrary,12):"":"S":/HOSTNAME="XSLT":/IOT=$S(($zcvt($get(format),"L")[",utf8")||$$$IsUnicode:"UTF8",1:"RAW"):/IBU=16384:/OBU=16384) Use tXDEV Quit:$$$ISERR(##class(%ZEN.Auxiliary.jsonProvider).%ArrayToJSON(.pMetaData,.pData)) // Flush any remaining output Write *-3 // Now read back a string (up to the maximum possible length, 32k or ~4MB for long strings) Set export = "" While (1) { #dim tChunk As %String Read tChunk:0 Quit:'$L(tChunk) Set export = export _ tChunk } } While (0) :Exit Close tXDEV Use tIO Quit export :Trap Set $ZT="" Goto Exit </script> <script type="text/javascript"> function test() { var str=#server(..SrvTest())#; var obj=ZLM.jsonParseObject(str); zenAlert("str=",str); zenAlert("obj=",obj); zenAlert("name=",obj.obj.children[0].name); /* можно ещё так var str2=ZLM.jsonEncode(obj,false); zenAlert("str2=",str2); */ } </script> </head> <body> <button onclick="test();">test</button> </body> </html> PS: в обратную сторону, думаю, справитесь самостоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 17:57 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
DAiMor тогда встречный вопрос, как организовать передачу/возврат гиперевентами сложных структур данных: объект с несколькими свойствами, некоторые свойства которого могут быть массивами? Передачу, например, так: Код: html 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.
Возврат с помощью jsonProvider ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 19:10 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
DAiMorтогда встречный вопрос, как организовать передачу/возврат гиперевентами сложных структур данных: объект с несколькими свойствами, некоторые свойства которого могут быть массивами? Тут можно вспомнить старинный анекдот: - Доктор, когда я делаю вот так (сгибается в немыслемую позу), у меня сильно болит вот тут... - Не делайте так! Любое большое и сложное можно разбить на много, много простых и маленьких... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 08:27 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
krvsa, Минусы: - много обработки на клиенте, - много обращений к серверу, которые будут нагружать шлюз. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 08:39 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
krvsaDAiMorтогда встречный вопрос, как организовать передачу/возврат гиперевентами сложных структур данных: объект с несколькими свойствами, некоторые свойства которого могут быть массивами? Тут можно вспомнить старинный анекдот: - Доктор, когда я делаю вот так (сгибается в немыслемую позу), у меня сильно болит вот тут... - Не делайте так! Любое большое и сложное можно разбить на много, много простых и маленьких... эмм, что может быть проще на клиенте Код: javascript 1. 2.
на сервере Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 10:09 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
DAiMorэмм, что может быть проще Выглядит не плохо... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 11:53 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
krvsa, *(если IE >= 8 ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 12:56 |
|
CSP. JSON.
|
|||
---|---|---|---|
#18+
krvsa, вот тут подробнее ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 13:02 |
|
|
start [/forum/topic.php?fid=39&msg=37826973&tid=1556830]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 163ms |
0 / 0 |