|   |   | 
| 
 | 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 | 
        А, уже. Ну лан )     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |