|
HTTP сервис - код на стороне сайта | ☑ | ||
---|---|---|---|---|
0
OnePrg
24.09.20
✎
10:42
|
Дайте пожалуйста примеры использования HTTP сервисов на стороне сайта.
Например, есть кнопка, по которой вызывается HTTP сервис (GET запрос), а ниже результат из 1С (POST запрос). |
|||
1
Юрий Лазаренко
24.09.20
✎
10:47
|
(0) Тебе нужен пример кода 1С, или кода сайта?
|
|||
2
AlexTim03
24.09.20
✎
10:47
|
НЕ в качестве рекламы, но вот неплохая статья про все это:
http://курсы-по-1с.рф/articles/2017-09-07-exchange-with-internet-services/ |
|||
3
OnePrg
24.09.20
✎
10:48
|
(1) сайта
|
|||
4
Юрий Лазаренко
24.09.20
✎
10:51
|
(3) Какой сценарий действий на сайте? Это может быть тупо <form>, которая передает в 1С значения своих полей в виде параметров, при нажатии на submit вся страница перезагружается и ее новый текст должен быть сформирован 1Ской. Или это может быть просто http-запрос в 1С, которая возвращает результат в виде строки или JSON, и потом javascript должен что-то сделать с этим результатом. В зависимости от сценария алгоритмы могут очень сильно различаться.
|
|||
5
MyNick
24.09.20
✎
10:56
|
(3) Я использую axios - компонент для js, который умеет работать с сервисами. Оч. простая штука
https://ru.vuejs.org/v2/cookbook/using-axios-to-consume-apis.html |
|||
6
OnePrg
24.09.20
✎
10:56
|
(4) <form>, которая передает в 1С значения своих полей в виде параметров, 1С возвращает результат в виде строки или JSON, и потом javascript должен что-то сделать с этим результатом.
|
|||
7
MyNick
24.09.20
✎
11:00
|
(6) На кнопку на сайте вешаешь OnClick, которая вызывает что-то подобное к твоей 1С, возвращающей джейсон
axios .get('https://api.coindesk.com/v1/bpi/currentprice.json') .then(response => (this.info = response.data.bpi)); В response получаешь ответ от 1С и "что-то делаешь с этим результатом" |
|||
8
Юрий Лазаренко
24.09.20
✎
11:13
|
(6) Вот так попробуй:
<form id="formElem"> <input type="text" name="name" value="John"> <input type="text" name="surname" value="Smith"> <input type="submit"> </form> <script> formElem.onsubmit = async (e) => { e.preventDefault(); let response = await fetch('/article/formdata/post/user', { method: 'POST', body: new FormData(formElem) }); let result = await response.json(); alert(result.message); }; </script> |
|||
9
Kesim
24.09.20
✎
11:54
|
(0) постман не предлагать?
|
|||
10
OnePrg
25.09.20
✎
10:09
|
Всем спасибо. Пошёл изучать.
|
|||
11
polosov
25.09.20
✎
10:10
|
(0) Совсем недавно вышла книга https://online.1c.ru/books/book/29582119/
Бегом покупать. |
|||
12
Юрий Лазаренко
25.09.20
✎
10:22
|
(11) Не подойдет книга, ТСу необходимо помочь собрать код, который будет выполняться на сайте, а не в 1С.
|
|||
13
OnePrg
25.09.20
✎
15:37
|
(8) код в модуль вставил, input'ы и кнопка появились
прописал URL вызова HS let response = await fetch('http://localhost/BAS/hs/My/Test', { method: 'POST', body: new FormData(formElem) но при нажатии на кнопку точка останова не срабатывает, а когда в браузере напрямую вызываю http://localhost/BAS/hs/My/Test - срабатывает |
|||
14
OnePrg
25.09.20
✎
15:56
|
Если без параметров, то точка останова срабатывает
let response = await fetch('http://localhost/BAS/hs/My/Test'); |
|||
15
OnePrg
25.09.20
✎
17:53
|
Решил вот так
let formData = new FormData(formElem); let response = await fetch('http://localhost/BAS/hs/My/Test?name='+formData.get('name')+'&surname='+formData.get('surname')); |
|||
16
Юрий Лазаренко
25.09.20
✎
20:04
|
(14) Где точка останова срабатывает? В браузере или в 1С? В (13) у тебя был POST запрос, а в браузере напрямую и в (15) GET. Может в этом дело?
|
|||
17
Юрий Лазаренко
25.09.20
✎
20:06
|
В (15) FormData лишняя, если ты потом GET-запрос собираешь из formData.get('name') и formData.get('surname'), можно было данные взять непосредственно из элементов формы. Хотя в принципе и так норм.
|
|||
18
OnePrg
29.09.20
✎
20:53
|
<form id="formElem">
<input type="text" name="pers_acc" > <input type="submit"> </form> <script> formElem.onsubmit = async (e) => { e.preventDefault(); let formData = new FormData(formElem); let response = await fetch('http://localhost/BAS/hs/My/Test?name='+formData.get('pers_acc')); let result = await response.json(); alert(result.tel); }; </script> Функция TestGET(Запрос) Ответ = Новый HTTPСервисОтвет(200); Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); Запись.ЗаписатьКонецОбъекта(); Запись.ЗаписатьИмяСвойства("tel"); Запись.ЗаписатьЗначение("050555555"); Запись.ЗаписатьКонецОбъекта(); Результат = Запись.Закрыть(); Ответ.УстановитьТелоИзСтроки(Результат); Ответ.Заголовки("Content-type","application/json"); Возврат Ответ; КонецФункции alert(result.tel) не срабатывает. Что не так? |
|||
19
Юрий Лазаренко
29.09.20
✎
20:55
|
(18) 1. Точка останова в 1С срабатывает?
2. В консоли браузера какие-то сообщения есть? Предположу, что там будет что-то с отвалом http-запроса из-за CORS. |
|||
20
OnePrg
29.09.20
✎
21:09
|
(19) 1. да
2. http://imagizer.imageshack.com/img922/3527/rimrVh.png |
|||
21
OnePrg
29.09.20
✎
21:16
|
||||
22
Василий Алибабаевич
29.09.20
✎
21:19
|
(18)
" Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); Запись.ЗаписатьКонецОбъекта(); " А не пробовали начинать запись объекта инструкцией ЗаписатьНачалоОбъекта()? |
|||
23
Василий Алибабаевич
29.09.20
✎
21:22
|
+ (22) Да и ошибка в 106 строке (метод SUBMIT) говорит, что серверная часть несколько впадает в ступор от того что от нее хотят.
|
|||
24
OnePrg
29.09.20
✎
21:24
|
(22) да, уже заметил, изменил, но результат тот же
Функция TestGET(Запрос) Ответ = Новый HTTPСервисОтвет(200); Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); Запись.ЗаписатьНачалоОбъекта(); Запись.ЗаписатьИмяСвойства("tel"); Запись.ЗаписатьЗначение("050555555"); Запись.ЗаписатьКонецОбъекта(); Результат = Запись.Закрыть(); Ответ.УстановитьТелоИзСтроки(Результат); Ответ.Заголовки("Content-type","application/json"); Возврат Ответ; КонецФункции |
|||
25
OnePrg
29.09.20
✎
21:25
|
(23) 106 это GET - с ним тоже нужно разобраться но потом, сейчас меня устраивает, что сайт передаёт данные 1С, сейчас не могу передать данные из 1С на сайт
|
|||
26
Юрий Лазаренко
29.09.20
✎
21:28
|
(21) Ошибка 500 говорит о том, что на сервере произошло что-то непредвиденное. У тебя происходит исключение в 1С.
заменить строку let result = await response.json(); на let result = await response; а строку alert(result.tel); на alert(result); Есть вероятность, что там будет текст ошибки 1С. А тк понятно, почему до alert не доходит - код останавливается на строке let result = await response.json(); так как response не является валидным json-ом. |
|||
27
Юрий Лазаренко
29.09.20
✎
21:28
|
+(26) * "заменить строку" читать как "Попробуй заменить строку"
|
|||
28
OnePrg
29.09.20
✎
21:29
|
||||
29
Юрий Лазаренко
29.09.20
✎
21:31
|
(28) Что-то в каких-то непонятных местах ошибки показывает. Обнови кэш браузера (один раз надо обновить страницу кнопками Ctrl+F5, желательно делать так каждый раз при изменении JS и CSS). И покажи еще, пишет ли что-то красным цветом на закладке console.
|
|||
30
OnePrg
29.09.20
✎
21:36
|
(29) очистил кэш http://imagizer.imageshack.com/img922/7107/cJe6Ag.png
обновил страницу http://imagizer.imageshack.com/img923/640/alKehW.png после вызова http://imagizer.imageshack.com/img924/4314/kFHBHa.png |
|||
31
Юрий Лазаренко
29.09.20
✎
21:39
|
(3) А если в браузере набрать http://localhost/BAS/hs/My/Test?name=123? Что пишет?
|
|||
32
Василий Алибабаевич
29.09.20
✎
21:39
|
(30) Все та же ошибка 500. Отлаживать код на стороне 1С.
|
|||
33
OnePrg
29.09.20
✎
21:39
|
||||
34
Юрий Лазаренко
29.09.20
✎
21:40
|
+(31) Что-то же он возвращает, не зря пишет, что там Unexpected token H
|
|||
35
OnePrg
29.09.20
✎
21:40
|
(31) {HTTPСервис.My.Модуль(13)}: Метод объекта не обнаружен (Заголовки)
|
|||
36
Юрий Лазаренко
29.09.20
✎
21:41
|
(35) Ну вот тебе и место ошибки, и описание. Как только это устранишь, все заработает.
|
|||
37
OnePrg
29.09.20
✎
21:43
|
Всем спасибо. Заработало.
<form id="formElem"> <input type="text" name="pers_acc" > <input type="submit"> </form> <script> formElem.onsubmit = async (e) => { e.preventDefault(); let formData = new FormData(formElem); let response = await fetch('http://localhost/BAS/hs/My/Test?name='+formData.get('pers_acc')); let result = await response.json(); alert(result.tel); }; </script> Функция TestGET(Запрос) Ответ = Новый HTTPСервисОтвет(200); Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); Запись.ЗаписатьНачалоОбъекта(); Запись.ЗаписатьИмяСвойства("tel"); Запись.ЗаписатьЗначение("050555555"); Запись.ЗаписатьКонецОбъекта(); Результат = Запись.Закрыть(); Ответ.УстановитьТелоИзСтроки(Результат); Ответ.Заголовки.Вставить("Content-type","application/json"); Возврат Ответ; КонецФункции |
|||
38
Юрий Лазаренко
29.09.20
✎
21:44
|
+(36) Ответ.Заголовки.Встпавить(), а не Ответ.Заголовки()
|
|||
39
Юрий Лазаренко
29.09.20
✎
21:44
|
А, уже. Ну лан )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |