Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые! Наблюдается весьма странная картина обработки синхронного и асинхронного вызова серверных методов различными браузерами. Имеется следующая страница: Код: plaintext 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. Задача: на время выполнения серверного метода "завешиваем" страницу серым фоном, в случае успешного завершения снимаем фон. Проблема: наблюдается различное выполнение браузерами в зависимости от способа вызова серверного метода: синхронный или асинхронный. Точнее: при синхронном вызове (метод ServerTest возвращает значение) Opera и Mozilla отрабатывают правильно (т.е. сначала происходит "завешивание", затем отрабатывается ServerMethod и в случае его успешного завершения "фон" снимается), а в случае IE, Chrome и Safary "завешивание" происходит после выполнения ServerMethod. Если же использовать асинхронный вызов (ServerMethod не возвращает значения), все вроде бы хорошо, но как в таком случае получить результат выполнения ServerMethod? Вопрос: в чем может быть причина такого поведения в IE, Chrome и Safary? Как можно это обойти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 10:33 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 10:44 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
kolesov13-й Пилигрим, М.б. через так обойти? Если вы имели в виду embeded javascript , то так даже в Opera и FF перестало правильно работать Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 11:00 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
13-й Пилигрим, Имел ввиду "Running Background Tasks on the Server" - мы когда-то пробовали, работает... А в Вашем случае вот так работает все: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Иногда очередь JS можно обмануть... Только я для IE и chrome смог проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 11:11 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
Сорри, в первой строчке конечно background_layer, а не background_layer1 (это я пока тестил намусорил) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 11:17 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
ещё вариант Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 12:28 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
13-й Пилигримв случае IE, Chrome и Safary "завешивание" происходит после выполнения ServerMethod Всегда использовали преимущественно ИЕ, начиная с 6.0 - с такой проблемой не сталкивались. Хотя всегда использовал только синхронные вызовы кащейских методов. Твой пример вот все никак не потестю... Заинтриговал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 16:36 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
krvsa13-й Пилигримв случае IE, Chrome и Safary "завешивание" происходит после выполнения ServerMethod Всегда использовали преимущественно ИЕ, начиная с 6.0 - с такой проблемой не сталкивались. Хотя всегда использовал только синхронные вызовы кащейских методов. Твой пример вот все никак не потестю... Заинтриговал. Ну и как? Протестировал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 14:46 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
13-й Пилигрим , никак... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 16:58 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
13-й ПилигримНу и как? Протестировал? Сафари у меня нет... А вот в Хроме посмотрел. Наши задачки тоже не дюже работают в Хроме... При нажатии на кнопки появляется много каких-то окошек... Но само действие так и не выполняется. В ИЕ7, ФФ и Опере все отрабатывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2010, 11:43 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
Доброго всем дня! Пытаюсь сделать описанные методы, получаю ошибку: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 06:39 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
mr.Partizan , где пример странички? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 08:56 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
krvsa mr.Partizan , где пример странички? Пытаюсь сделать так: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 09:29 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
mr.Partizan , зачем вызывать ЗЕНовский метод, дабы потом из него вызывать скриптовые? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 11:55 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
Как вариант... Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 12:00 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
mr.Partizan , причем не рентабельно писать цсс-свойства в программке... Годаздо эффективнее подготовить несколько классовых селекторов в цсс, а потом только менять свойство className у самих хтмл-элементов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 12:09 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
krvsa mr.Partizan , зачем вызывать ЗЕНовский метод, дабы потом из него вызывать скриптовые? В ЗЕНовском методе есть еще код который подтягивает данные из формы + выполняется процедура на основе этих данных. На время выполнения этой процедуры и нужно "завесить" экран. Может это как-то можно реализовать с помощью ЗЕНовского метода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 12:37 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
mr.PartizanМожет это как-то можно реализовать с помощью ЗЕНовского метода? Нет. Только скриптовым... Но из скриптового зеновский вызывается просто. Этот тест даёт ответ на твою проблему... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 12:51 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
krvsaНо из скриптового зеновский вызывается просто. Вот пример из нашей странички... Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 12:53 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
mr.Partizan[нужно "завесить" экран. На каждой зен-странице есть див с ид="zenModalDiv"... Используй его. Т.к. свой просто так еще и не расположишь как надо. Пример засветки экрана: Код: plaintext 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. Но старые версии ИЕ отвратно работают с Код: plaintext Как вариант заменть на Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 13:22 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
Разобрался в чем было дело. Нужно было писать ClientMethod а не Method для скриптовых методов, но студия 2008 CACHE "ругалась" при этом. После установки 2010 CACHE все заработало. в итоге сделал так: Код: plaintext 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. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. В итоге результат: в Opera и Mozilla завешивание происходит корректно, а вот в IE не совсем (( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2010, 14:25 |
|
||
|
ZEN: Сихронный и асинхронный вызов серверного метода
|
|||
|---|---|---|---|
|
#18+
mr.Partizan Синхронный вариант Class sqlru.test1 Extends %ZEN.Component.page { /// Отображаемое имя для нового приложения. Parameter PAGENAME; /// Этот блок Style содержит определение CSS-стиля страницы. XData Style { <style type="text/css"> #progressbox { position: absolute; width: 500px; border: #cccccc 1px solid; color: black; font-weight: bold; font-size: 8pt; background-color: #F5F5F5; display: none; text-align: center; padding-top: 30px; padding-bottom: 30px; } </style> } /// Этот XML блок описывает содержимое этой страницы. XData Contents [ XMLNamespace = " http://www.intersystems.com/zen" ] { <page xmlns=" http://www.intersystems.com/zen" title=""> <form id="fmTest" name="fmTest"> <button caption="Выполнить" onclick="zenPage.Get();"/> <html OnDrawContent="MyDraw" seed="40"/> </form> <html id="progressbox"> Пожалуйста, подождите. Идет обработка запроса...<br/><br/> </html> </page> } ClientMethod Get() [ Language = javascript ] { zenPage.showBackgroundLayer('fmTest'); //идея предложена kolesov window.setTimeout('var res = zenPage.ServerMethod(); if (res) zenPage.hideBackgroundLayer("fmTest")',0); } ClientMethod showBackgroundLayer(formName) As %Boolean [ Language = javascript ] { document[formName].parentNode.parentNode.style.filter = "Alpha(opacity=25), blue()"; document[formName].style.MozOpacity = "0.25"; document[formName].style.opacity = "0.25"; var div=zen('progressbox').getEnclosingDiv(); div.style.top = document.body.scrollTop + document.body.clientHeight / 2 - 100; div.style.left = document.body.offsetWidth / 2 - 250; div.style.display = "block"; document.body.style.cursor = "progress"; } ClientMethod hideBackgroundLayer(formName) As %Boolean [ Language = javascript ] { document[formName].parentNode.parentNode.style.filter = ""; document[formName].style.MozOpacity = "1"; document[formName].style.opacity = "1"; zen('progressbox').getEnclosingDiv().style.display = "none"; document.body.style.cursor = "auto"; } ClassMethod ServerMethod() As %Boolean [ ZenMethod ] { hang 3 quit $$$YES } Method MyDraw(pSeed As %String) As %Status { set s=$replace($j("",pSeed)," ","O") for i=1:1:pSeed &html<#(s)#<br>> Quit $$$OK } } Асинхронный вариант Class sqlru.test2 Extends %ZEN.Component.page { /// Отображаемое имя для нового приложения. Parameter PAGENAME; /// Этот блок Style содержит определение CSS-стиля страницы. XData Style { <style type="text/css"> </style> } /// Этот XML блок описывает содержимое этой страницы. XData Contents [ XMLNamespace = " http://www.intersystems.com/zen" ] { <page xmlns=" http://www.intersystems.com/zen" title=""> <form id="fmTest" name="fmTest"> <button caption="Выполнить" onclick="zenPage.Get();"/> </form> <html OnDrawContent="MyDraw" seed="40"/> </page> } ClientMethod Get() [ Language = javascript ] { zen('fmTest').startProgressBar(); zenPage.ServerMethod(); } ClassMethod ServerMethod() [ ZenMethod ] { &js< // по завершении выполнения серверного метода этот скрипт будет отправлен на клиент для выполнения var comp=zen('fmTest'); comp.stopProgressBar(); comp.refreshContents(); > hang 3 } Method MyDraw(pSeed As %String) As %Status { set s=$replace($j("",pSeed)," ","O") for i=1:1:pSeed &html<#(s)#<br>> Quit $$$OK } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2010, 16:33 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=36963061&tid=1557904]: |
0ms |
get settings: |
7ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
153ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 492ms |

| 0 / 0 |
