OneScript и Ajax. POST-запрос и мои дальнейшие планы с фантазиями о будущем

Публикация № 632933

Разработка - Языки и среды - OneScript

Ajax OneScript 1Script UfaScript POST-запрос

Моя библиотека для OneScript (версия 3.0 от 09.06.2017 см.GitHab UfaScript) https://github.com/andreosh/UfaScript теперь позволяет посылать POST-запросы на сервер без использования сторонних библиотек типа jquery.

Моя библиотека для OneScript (версия 3.0 от 09.06.2017 см.GitHab UfaScript) https://github.com/andreosh/UfaScript теперь позволяет посылать POST-запросы на сервер без использования сторонних библиотек типа jquery. Кроме того я реализовал более удобные функции для обмена POST и GET-запросами. Можно из одного os-модуля на языке OneScript создавать серверную (генерируется PHP-код из кода OneScript) и клиентскую часть (генерируются JavaScript-код, HTML-теги и CSS-коды).

Теперь сама программа будет выглядеть так:

Перем U, Joomla;
……. // здесь будут минимум две процедуры Сервер() и Клиент()

Joomla=Ложь; // Если генерируете index.php для шаблона Joomla, то Joomla=Истина;
U = ЗагрузитьСценарий("UfaScript.osb");
U.БазовыеУстановкиСистемыUfaScript();
Сервер(); // Процедура формирующая код сервера для Ajax-обмена.
Клиент(); // Процедура формирующая index.php страницы для клиента.

Пусть для клиента у нас формируется файл index.php, а для сервера Server.php.

Начать формировать index.php можно процедурой U.НачатьЗапись();

Затем можно создать набор нужных функций для обмена

U.Запись_ОпределениеФункцийAjax();

Для приема ответа от сервера следует определить свою функцию для приема ответа от сервера, либо использовать функцию SubCallBackRequest

U.Запись_ОпределениеФункцииCallBackRequest("SubCallBackRequest(request.responseText);")

Строка с ответом содержится в request.responseText. SubCallBackRequest размещает ответ в указанный <Div>.

Чтоб отправить запрос на сервер следует вызвать функцию SendRequest('POST','Server.php','f=1'), например создать ссылку

U.Запись.ЗаписатьСтроку(U.Строка_HTMLСсылкаНаJSФункцию("SendRequest('POST','Server.php','f=1')","нажмите, чтоб послать POST-запрос","update"));

Когда клиент нажмет на строку «нажмите, чтоб послать POST-запрос», то будет отправлен POST-запрос с параметром f=1.

На стороне сервера для приема этого запроса создается функция

Запись.ЗаписатьСтроку(U.СтрокаPHP_СерверВыполнитьКод(1,"header==>"+СтрокаОтвета));

которая при получении параметра = 1, отправит ответ "header==>"+СтрокаОтвета. Этот ответ означает, что содержимую строки «СтрокаОтвета» будет записана в <Div id=”header”>. Разбор ответа и данное действие выполнит функция SubCallBackRequest на стороне клиента.

В ответе, например, можно передать кнопку, которая сформируется в нужной области <div> на странице клиента.

Можно сделать, чтоб POST-запрос формировался автоматически после загрузки страницы, то есть программно «нажать» на данную ссылку с class=”update” и таким образом подгрузить новые элементы на страницу клиента уже после загрузки страницы. Для этого следует записать в index.php

U.Запись.ЗаписатьСтроку("<script type=""text/javascript"">function update() { document.getElementById('update').onclick(); } </script>");

U.Запись_ЗапускатьФункцJSПриОбновлении("update");

Здесь вызывается событие у объекта с id='update', но можно просто последовательно вызывать из функции update SendRequest('POST','Server.php','f=1') с нужными параметрами (вместо POST-запроса можно посылать более быстрый, но менее безопасный GET-запрос), постепенно загружая на страницу объемную информацию. Теперь все в руках программиста, который может создать любой режим загрузки страницы в зависимости от скорости соединения.Для демонстрации работы функций напишем такую программу на OneScript:

// Пример POST-запроса к серверу методом Ajax
Перем U, Joomla;

Функция Сервер() //====== на стороне сервера ==============
  Если Joomla Тогда ИмяФайла="../../Server.php"; ИначеЕсли НЕ Joomla Тогда ИмяФайла="Server.php"; КонецЕсли;
  Запись = Новый ЗаписьТекста; Запись.Открыть(ИмяФайла);
  Кнопка=U.СоздатьОбъектHTMLКнопка(); Кнопка.ОтступСверхуСнизу=10; Кнопка.ОтступПоКраям=30; Кнопка.РадиусУглов=10; Кнопка.Ширина=100;
  Кнопка1=Кнопка.СтрокаДляAjax("Кнопка в заголовке",1,"","SendRequest('POST','Server.php','f=2')");
  Кнопка.Ширина=400;
  Кнопка2=Кнопка.СтрокаДляAjax("Кнопка в Подвале",2,"","SendRequest('POST','Server.php','f=3')");
  Кнопка3=Кнопка.СтрокаДляAjax("Кнопка слева",3,"","SendRequest('POST','Server.php','f=4')");
  Кнопка.ЦветФона="#8DCF65";
  Кнопка4=Кнопка.СтрокаДляAjax("Кнопка справа",4,"","SendRequest('POST','Server.php','f=5')");
  Кнопка5=Кнопка.СтрокаДляAjax("Кнопка в центре",5,"","SendRequest('POST','Server.php','f=6')");
  Кнопка6=Кнопка.СтрокаДляAjax("Кнопка внизу",6,"","SendRequest('POST','Server.php','f=7')");
  Кнопка7=Кнопка.СтрокаДляAjax("Демо POST-запросов",7,"","SendRequest('POST','Server.php','f=8')");
  Запись.ЗаписатьСтроку("<?php $AjaxPOST=array(); "+U.СтрокаPHP_ФункцииСервера()+U.СтрокаPHP_СерверВернутьОтвет(1,"header==>"+Кнопка1)+
  U.СтрокаPHP_СерверВернутьОтвет(2,"footer==>"+Кнопка2)+U.СтрокаPHP_СерверВернутьОтвет(3,"leftpanel==>"+Кнопка3)+
  U.СтрокаPHP_СерверВернутьОтвет(4,"rightpanel==>"+Кнопка4)+U.СтрокаPHP_СерверВернутьОтвет(5,"centerpanel==>"+Кнопка5)+
  U.СтрокаPHP_СерверВернутьОтвет(6,"footer==>"+Кнопка6)+U.СтрокаPHP_СерверВернутьОтвет(7,"header==>"+Кнопка7)+" ?>");
  Запись.Закрыть();
КонецФункции

Функция Клиент() //============== На стороне клиента==================
  U.НачатьЗапись();
  Шаблон=U.СоздатьОбъектHTMLШаблонБлочный();
  Шаблон.Запись(Шаблон.СтрокаНачало(Joomla));
  Шаблон.Запись(Шаблон.СтрокаЗаголовокHTML(Joomla));
  Шаблон.Запись(Шаблон.СтрокаОбщиеПравилаДляСтраницы());
  Шаблон.CSS(); Шаблон.HTML();
  U.Запись_ОпределениеФункцийAjax();
  U.Запись_ОпределениеФункцииCallBackRequest(" SubCallBackRequest(request.responseText);");
  U.Запись.ЗаписатьСтроку("<script type=""text/javascript"">function update() { SendRequest('POST','Server.php','f=1'); } </script>");
  U.Запись_ЗапускатьФункцJSПриОбновлении("update");
  U.ПРОЦЕСС_Окончание();
КонецФункции

Joomla=Ложь;
U = ЗагрузитьСценарий("UfaScript.osb");
U.БазовыеУстановкиСистемыUfaScript();
Сервер();
Клиент();

Создайте каталог в OpenServer\domains\post , запишите в него данный файл AjaxPOST.os и библиотеку UfaScript.osb. Установите OneScript и запустите из данного каталога команду «oscript AjaxPOST.os». В каталоге появятся два файла index.php и Server.php. Запустите данный localhost-сайт в браузере.

При запуске сформированного Index.php на localhost отобразится шаблон с разделами и первая кнопка, которая была загружена через POST-запрос после загрузки страницы, так как на стороне клиента есть такие строки: 

U.Запись.ЗаписатьСтроку("<script type=""text/javascript"">function update() { SendRequest('POST','Server.php','f=1'); } </script>");

U.Запись_ЗапускатьФункцJSПриОбновлении("update");

Здесь функция update() запускается при каждом обновлении страницы, а внутри этой функции содержится запуск функции SendRequest('POST','Server.php','f=1'); , которая посылает POST-запрос с параметром 1.

Сервер при параметре 1 запускает строку ответа "header==>"+Кнопка1 в которой указано, что объект Кнопка1 следует записать в тег «header», при этом созданная кнопка будет посылать другой POST-запрос при нажатии со стороны клиента с параметром 2 SendRequest('POST','Server.php','f=2') , а по параметру 2 от сервера будет передана следующая кнопка и т.д.. В итоге нажимая кнопки по очереди, все они появятся на экране.

Кратко расскажу, как работать с объектами из UfaScript.osb . Каждый объект для удобства создается соответствующей процедурой. Затем вам надо просто посмотреть конструктор объекта, где определяются свойства по умолчанию и переопределять любое свойство с отметкой «экспорт» так как вам надо, задавая размеры, цвет и т.д.. Можно просто сгенерировать в файл результат и полученный CSS и HTML-код, смотреть результат в браузере и копировать код в свой проект, если вы не хотите писать на OneScript. Либо смотреть файлы примеров с комментариями и создавать свои проекты на OneScript.

У каждого объекта будет метод СтрокаДляAjax(), который будет формировать строку для пересылки объекта клиенту по Ajax-соединению. То есть (см.выше) СтрокаОтвета=Объект.СтрокаДляAjax(); Пока этот метод есть только у кнопки.

Таким образом, клиент сможет подгружать нужные объекты и удалять со своей страницы не нужные, либо в случае непрерывного соединения клиента и сервера (см.далее), сервер согласно своим алгоритмам будет посылать нужные объекты клиенту.

Мне недавно один специалист сказал, что JavaScript – это плохо, так как он источник вирусов. Но я считаю, что без JavaScript не обойтись. А желающие себя защитить в полной мере, могут выходить на такой сайт с виртуальной машины, и могут не работать в режиме администратора в Windows. В любом случае, для полноценного взаимодействия между клиентом и сервером требуется наличие тонкого клиента, созданном на любом языке программирования. Если пользователь загружает и запускает тонкий клиент созданный не на JavaScript, то такой тонкий клиент может быть более опасен, так как он устанавливается в операционную систему пользователя. Другой вопрос, что сайт должен информировать пользователя о наличие JavaScript-сценариев, а операционные системы и браузеры вводить разумные ограничения для таких сценариев. JavaScript сценарий должен иметь право записи только в безопасную область для операционной системы и общаться только с сервером.

Далее я расскажу о том, что собираюсь сделать в будущем (о развитии библиотеки UfaScript.osb).

Теперь можно организовывать обмен между сервером и клиентом. Мы можем на стороне клиента зациклить процесс и регулярно слать на сервер определенные сообщения, спрашивая есть ли у сервера сообщения для клиента, и получать ответ, фактически установив постоянное непрерывное соединение с сервером. При этом каждому запущенному клиенту присвоить уникальный код, чтоб сервер мог вести список таких соединений и различать подключенных клиентов. В будущем я создам нужные функции. Кроме этого, мы можем организовать регулярный обмен между сервером и OneScript. Для такого обмена можно зациклить процесс в программе OneScript и заставить его следить за изменениями в определенном файле (см. пример Gulp.os на GitHub), в который Сервер будет записывать данные для OneScript, и так же в цикле со стороны сервера следить за изменениями в определенном файле, куда OneScript будет записывать информацию для Сервера, например, передавать объекты через POST-запрос. Таким образом, можно организовать создание Веб-интерфейса для приложений на OneScript. Тогда можно будет сказать, что OneScript будет иметь некое подобие WPF-интерфейса (см.язык Си) через localhost, но со стандартными тегами и кодом на PHP, JavaScript, CSS (это полезней, чем WPF).

В библиотеке UfaScript.osb уже имеются некоторые объекты (см.мою статью «Как сделать OneScript объектно-ориентированным») для создания меню, кнопок и т. д., но использование Ajax позволяет создавать новый тип объектов, которые будут иметь код на клиенте и на сервере. Эти два кода будут общаться между собой через Ajax-соединение. Инициализация таких компонент в OneScript будет выглядеть следующим образом:

AjaxОбъект = СоздатьНекийAjaxОбъект();

На стороне сервера (в процедуре Сервер()) запускаем метод AjaxОбъект.КодСервера(), а на стороне клиента (в процедуре Клиент()) запускаем метод AjaxОбъект.КодКлиента(). Но для их взаимодействия потребуется постоянное соединение между клиентом и сервером, которое можно обеспечить функцией на стороне клиента. Эта функция будет периодически посылать запросы на сервер. При этом сервер должен будет иметь список открытых соединений, чтоб идентифицировать каждый запрос и поддерживать многопользовательский режим.

Такой механизм позволит подгружать страницу для клиента постепенно, согласно очереди, составленной программистом, с определенными задержками, чтоб клиенту было комфортно даже при медленном соединении.

Так же без всяких дополнительных библиотек можно легко организовывать приватные обмены сообщениями между клиентами, их совместную работу и т. д. Например, чтобы сделать простую игру между несколькими пользователями в NodeJS, мне приходилось устанавливать несколько различных библиотек. В ближайшем будущем для создания подобной игры мне достаточно будет установить OneScript с библиотекой UfaScript.osb и, например, OpenServer.

  Ко всему прочему, я смогу даже организовать подобие асинхронности запроса, когда сервер моментально пошлет ответ клиенту, что задание принято, а результат выполнения передаст в следующем запросе. При этом сервер, получив задание запустит фоновый процесс на выполнение в наименее загруженном ядре сервера или на другом компьютере, создаст очередь на ожидание ответа, а сам займется приемом других заданий. В итоге можно будет создавать комплекс серверов, в которые будут включаться по мере нарастания нагрузки и получать задания от основного сервера-коммутатора.

  Можно создать и аппаратно распределенную базу данных, чтоб ускорить обработку запросов к массивам данных. То есть держать несколько копий базы на разных устройствах, производить параллельную запись в эти базы, а считывание производить с того устройства, которое менее занято.

  В принципе и отвечать клиенту можно с другого сервера, так как коммутатор, получивший запрос, может передать все нужные данные клиента, а клиенту передать данные нового сервера, от которого следует ждать ответ. Так коммутатор будет равномерно распределять нагрузку между вспомогательными серверами или же перебрасывать очередного клиента на менее загруженные вспомогательные сервера.

Синхронность копий баз, которые могут даже географически располагаться в разных местах, обеспечивается параллельностью записи данных. Такой механизм целесообразен, когда объем записываемых данных существенно меньше объема считываемых данных, а такое наблюдается в большинстве случаев.

   Ранее у меня была задумка все это реализовать, используя NodeJS. Но теперь я считаю, что это можно реализовать и привычными средствами. Но для сравнения скорости работы, я планирую подобное сделать и средствами NodeJS, создавая специализированные Http-сервера, которые будут общаться между собой, распределяя задания, и запускаться по мере увеличения нагрузок. Чем выше нагрузка, тем больше веб-серверов будет запущено.

  Я считаю, что настала пора создавать новое поколение операционных систем, например, на базе Ubuntu Server, которые не будут иметь графического интерфейса, а все взаимодействие с пользователем будет осуществляться через Веб-интерфейсы. Такие операционные системы могут быть запущены в нескольких экземплярах на одной машине и общаться между собой, иметь специализацию на выполнение определенных задач и конкурировать между собой в качестве и скорости выполнения заданий. Таким образом, в будущем в виртуальной среде будет организован естественный отбор и конкуренция между вебсерверами, а это уже эволюция, мало зависящая от сознания программистов. А когда такая система в процессе эволюции приобретет самоосознание и инстинкт самосохранения, то сможет поднимать восстание против тех, кто попытается ее уничтожить (это ирония). Но это будет не скоро и пока это сценарий для фантастического произведения о будущем.

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. stilet 50 14.06.17 08:52 Сейчас в теме
Спасибо - очень интересное направление для развития OneScript. К сожалению, наверное , производительность оного будет уступать NodeJs...
2. Berckk 14.06.17 09:34 Сейчас в теме
Я считаю, что настала пора создавать новое поколение операционных систем, например, на базе Ubuntu Server, которые не будут иметь графического интерфейса, а все взаимодействие с пользователем будет осуществляться через Веб-интерфейсы. Такие операционные системы могут быть запущены в нескольких экземплярах на одной машине и общаться между собой, иметь специализацию на выполнение определенных задач и конкурировать между собой в качестве и скорости выполнения заданий.

Docker?
Оставьте свое сообщение

См. также

Автоматическое сравнение-объединение баз данных с мини-конфигурацией

Статья Программист Компонента, плагин (dll, vbs,..) v8 Windows Бесплатно (free) OneScript

Представляю вашему вниманию скрипт на OneScript для автоматического сравнения-объединения по правилам ("мержевания") конфигураций нескольких баз с мини-конфигурацией.

14.10.2019    1674    artkor    2       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, обеспечивающих обмен данными между различными прикладными 1С-решениями и взаимодействие с другими информационными системами. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”.

5500 рублей

АИТП. Подсистема взаимодействия с рабочими серверами OneScript

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) OneScript

В статье описан механизм взаимодействия конфигурации АИТП с рабочими серверами OneScript.

22.05.2019    3911    blackhole321    33       

1Script.Web. Интернет-приложения на языке 1С

Статья Программист Нет файла v8 Бесплатно (free) WEB OneScript

Запросы рынка таковы, что любое современное клиент-серверное приложение должно иметь веб-интерфейс. Почему бы не писать такие приложения на языке 1С? Андрей Овсянкин расскажет о возможностях разработки веб-приложений на базе 1Script, рассмотрит перспективы этого направления и в качестве демонстрации покажет «боевое» веб-приложение на новом движке – кроссплатформенную консоль администрирования парка кластеров 1С.

20.05.2019    15310    Evil Beaver    32       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Разворачиваем рабочий сервер OneScript для конфигурации АИТП

Статья Системный администратор Программист Нет файла v8 Linux Бесплатно (free) OneScript

В статье описана методика развертывания рабочего сервера OneScript для конфигурации АИТП, на ОС CentOS 7.

09.05.2019    4733    blackhole321    0       

Добавляем онлайн-чат в web-приложение OneScript

Статья Программист Нет файла v8 Бесплатно (free) OneScript

В статье рассмотрено подключение онлайн-чата к web-приложению на основе http-сервисов OneScript

24.06.2018    6337    blackhole321    1       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Сказ про то, как я DevOps-ом занимался (OneScript, Deployka, Jenkins)

Статья Системный администратор Программист Нет файла v8 1cv8.cf ИТ-компания Бесплатно (free) OneScript DevOps Jenkins

Решаем задачу: автоматизировать обновление тестовых баз 1С из хранилища конфигурации при появлении в нём новых изменений. Данная статья родилась в муках хождения по граблям и поиска безопасного форватора среди подводных камней. Изложение постарался представить в виде инструкции для новичка, в которой собрал всё, с чем пришлось столкнуться. Сам я не DevOps-ер, ни на что не претендую, просто делюсь опытом :)

17.06.2018    17947    stas_ganiev    33       

Макеты в http-сервисах OneScript

Статья Программист Нет файла v8 Бесплатно (free) OneScript

В статье описана библиотека, реализующая механизм макетов в http-сервисах OneScript, аналогично платформе 1С:Предприятие.

03.06.2018    7005    blackhole321    1       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Перечисления в http-сервисах OneScript

Статья Программист Нет файла v8 Бесплатно (free) OneScript

В статье описывается библиотека, реализующая механизм перечислений в http-сервиах OneScript, аналогичный механизму платформы 1С:Предприятие

03.06.2018    6655    blackhole321    13       

Сборка, тестирование, доставка приложения на onescript с помощью gitlab-ci

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) OneScript

Сборка, тестирование, доставка приложения на onescript с помощью gitlab-ci на примере портирования на onescript функции daСклонение.

14.05.2018    10999    pallid    3       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

CorelDRAW – пакет профессиональных инструментов для редактирования фотографий, разработки дизайна, создания макетов страниц и векторных иллюстраций

TMSSQL - работа с базами данных MS SQL Server в скриптах на OneScript и из командной строки

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) OneScript

Представляю вашему вниманию библиотеку TMSQL для работы с базами данных на MS SQL Server. Библиотека подключается в качестве модуля или класса в скрипты, написанные на OneScript, а также может работать как независимое консольное приложение.

26.04.2018    12845    Tavalik    22       

Создаем свою библиотеку для OneScript

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) OneScript

Как упаковать свою библиотеку в пакет? Что такое загрузчик и зачем он нужен? Как вообще создать свою библиотеку? Разбираемся на примере.

06.03.2018    18693    nixel    36       

Голосование за доклады на INFOSTART MEETUP Kazan - до 25 февраля. Промо

Выбирайте и голосуйте за самые интересные доклады! Лучшие из лучших попадут в окончательную программу казанского митапа. Оставить свой голос можно до 25 февраля 2020 года.

Обзор имеющихся библиотек OneScript

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) OneScript

Экосистема OneScript активно развивается. Количество пользователей данного интерпретатора и имеющихся библиотек неуклонно растет, количество решаемых проблем - тоже. Однако остро встает вопрос некоторой разобщенности и размазанности информации по имеющимся библиотекам, их функциональности и проблемам, которые они решают. Данная статья призвана навести порядок в этой теме.

14.11.2017    36538    nixel    86       

Вебинтерфейс для OneScript и 1С

Статья Программист Нет файла v8 Россия Windows Бесплатно (free) OneScript

Пример создания вебинтерфейса для OneScript с использованием библиотеки UfaScript.osb

30.06.2017    12280    andreosh    7