HTTP-запросы (get и post) в 1С 8.2 и 8.3

Что должен отдавать бэкэнд

На бэкэнде убедитесь, что (напр. смотря на приходящие заголовки в консоли браузера):

…а если…

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

Dojo toolkit

Наиболее профессионально общение с сервером, на мой взгляд, сделано в dojo. Для удобства работы с асинхронными вызовами, вdojo и Mochikit используется специальный объект Deferred. Умеет посылать формы, отменять запросы, позволяет строить сложные цепочки асинхронных вызовов.

Надо сказать, что в dojo есть еще масса других транспортов, которые позволяют вытворять со связью клиент-сервер все, что только возможно и невозможно… Надо только разобраться как, на момент написания доки, откровенно говоря, слабоваты.

Firefox ставит responsexml вида …

Да, у браузеров типа Mozilla это такой способ сказать, что документ невалидный.

Internet explorer trusted zone

Любые запросы допустимы между сайтами, находящимися в доверенной (trusted) зоне Internet Explorer. Так что, внутренний корпоративный портал может быть у всех пользователей в этой зоне, и он сможет делать запросы к любым сайтам.

Onreadystatechange

Ссылается на функцию-обработчик состояний запроса. В некоторых браузерах функция имеет аргумент — событие. Не используйте его, он совершенно лишний.

Open()

Варианты вызова:

Prototype

Во фреймворке prototype Ajax представлен рядом классов вида Ajax.*. В сочетании с другими методами библиотеки — предоставляет весь стандартный функционал. Кроме того — приятный бонус: Ajax.PeriodicalUpdater умеет легко обновлять HTML-элемент с сервера и гибко увеличивать промежуток между опросами при проблемах серверной части.

Readystate

Номер состояния запроса от 0 до 4. Используйте только 4 («completed»).

Responsetext

Текст ответа сервера. Полный текст есть только при readyState=4, ряд браузеров дают доступ к полученной части ответа сервера при readyState=3.

Похожее:  Алтайэнергосбыт — Вход в Личный кабинет 🔑 Официальный сайт

Responsexml

Ответ сервера в виде XML, при readyState=4.

Это свойство хранит объект типа XML document, с которым можно обращаться так же, как с обычным document. Например,

Same origin и фреймы

Приятным бонусом свойства document.domain является возможность коммуникации между фреймами/ифреймами на одном домене.

То есть, например, если

Statustext

Текстовая расшифровка status, например «Not Found» или «OK».

Yahoo ui (yui)

В Yahoo UI соединениями с сервером заведует Connection Manager. Главная фунция asyncRequest принимает в качестве одного из параметров (callback) объект, который позволяет подписываться на события, указывать timeout и посылать на сервер объект.

Запросы multipart/form-data

Второй способ кодирования — это отсутствие кодирования. Например, кодировать не нужно для пересылки файлов. Он указывается в форме (только для POST) так:

В этом случае при отправке данных на сервер ничего не кодируется. А сервер, со своей стороны, посмотрев на Content-Type(=multipart/form-data), поймет, что пришло.

Использование наддомена

Часто кроссбраузерные запросы — это

Как послать post-запрос из 1с?

POST-запросы отличаются от GET-запросов тем, что помимо заголовков могут содержать еще и тело. Именно поэтому в случаях, когда нужно отправить какую-то информацию на сайт (авторизация, файл, что-то еще)  необходимо воспользоваться POST-запросом.

В качестве небольшого примера рассмотрим обращение с сервису проверки орфографии Яндекс.Спеллер через POST-запрос.

Отдельно отмечу заголовок application/x-www-form-urlencoded  — он означает, что параметры в теле запроса кодируются в кортежах с ключом, разделенных символом «&», с «=» между ключом и значением. Если же в теле запроса требуется отправить двоичные данные, то в заголовке «Content-Type» следует указать multipart/form-data;boundary=»boundary» (вместо «boundary» можно выбрать другой разделитель). Достаточно неплохо про метод POST написано здесь.

Кодировка (языковая)

Если Вы используете только UTF-8 — пропустите эту секцию.

Похожее:  Что такое авторизация банковской карты и как ее пройти в банке

Все идущие на сервер параметры GET/POST, кроме случая multipart/form-data, кодируются в UTF-8. Не в кодировке страницы, а именно в UTF-8. Поэтому, например, в PHP их нужно при необходимости перекодировать функцией iconv.

С другой стороны, ответ с сервера браузер воспринимает именно в той кодировке, которая указана в заголовке ответа Content-Type. Т.е, опять же, в PHP, чтобы браузер воспринял ответ в windows-1251 и нормально отобразил данные на странице в windows-1251,нужно послать заголовок с кодировкой в php-коде, например так:

Или же, такой заголовок должен добавить сервер. Например, в apache автоматически добавляется кодировка опцией:

# в конфиге апача
AddDefaultCharset windows-1251

Кросс-доменные запросы в ff3/ie8/opera9..

В спецификации HTML 5 предусмотрены кросс-доменные запросы postMessage.

Создатели Firefox и Opera реализовали этот вариант, см. например MDC: DOM:window.postMessage.

Разработчики IE8 пошли другим путем и предлагают XDomainRequest.

Оба способа вполне жизнеспособны и уже пригодны для использования в интранет-приложениях, когда на всех машинах администратор ставит одинаковый браузер, например, Firefox 3 ?

Не используйте синхронные запросы

Синхронные запросы применяются только в крайнем случае, когда кровь из носу необходимо дождаться ответа сервера до продолжения скрипта. В 999 случаях из 1000можно использовать асинхронные запросы. При этом общий алгоритм такой:

  1. Делаем асинхронный запрос
  2. Рисуем анимированную картинку или просто запись типа «Loading…»
  3. В onreadystatechange при достижении состояния 4 убираем Loading и, в зависимости от status вызываем обработку ответа или ошибки.

Кроме того, иногда полезно ставить ограничение на время запроса. Например, хочется генерировать ошибку, если запрос висит более 10 секунд.

Для этого сразу после send() через setTimeout ставится вызов обработчика ошибки, который очищается при получении ответа и обрывает запрос с генерацией ошибки,если истекли 10 секунд.

Похожее:  Как бесплатно узнать, есть ли штрафы ГИБДД через онлайн в 2021 году |

Таймаут на синхронный запрос ставить нельзя, браузер может висеть долго-долго.. А вот на асинхронный — пожалуйста.

Этот пример демонстрирует такой таймаут.

Простой post-запрос.

WEBv81cv8.cfТранспорт, автопарки, таксиАбонемент ($m)

Краткая статья о том как вывести на карту (в 1С) маршруты с помощью OpenStreetMap, OSRM и Leaflet. По данной системе очень мало примеров, но так как OpenStreetMap является бесплатным сервисом и не требует никаких ключей и регистраций, и является довольно мощным механизмом, решил написать небольшую статью “как это сделать?”.
В первую очередь скажу, все намного проще, если вы используете последнюю версию платформы (8.3.14), где есть поддержка практически всех браузеров (IE 11, EDGE, Mozilla), но что делать если у нас не самая свежая платформа, где поддержка только IE 9?

2 стартмани

12.02.2022   
43935   
147   
Ditron   
136
   

Разбор примера работы с кешем

Внешний тест (1) опирается на то, что в Internet Explorer, если запрос возвращается из кеша без перепроверки, заголовок Date — пустая строка. Поэтому при этом нужно сделать дополнительный запрос, который как раз и будет реальным запросом к серверу.

Когда делаем дополнительный запрос, что ссылку на кешированый запрос сохраняем, т.к если код ответа дополнительного запроса — «304 Not Modified», то его тело будет пустой строкой, и нужно будет вернуться к кешированному объекту.

Send()

Отсылает запрос. Аргумент — тело запроса. Например, GET-запроса тела нет, поэтому используется send(null), а для POST-запросов тело содержит параметры запроса.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector