![]() |
![]() |
![]() |
|
Как передать структуру в post запросе? | ☑ | ||
---|---|---|---|---|
0
Law_Of_Evi1
28.06.17
✎
07:43
|
Используя вебхук на bitrix24 получаю элементы справочника.
Пример на php : var params = { 'IBLOCK_TYPE_ID': 'bitrix_processes', 'IBLOCK_ID': 'rest_1' }; BX24.callMethod( 'lists.element.get', params, function(result) { if(result.error()) alert("Error: " + result.error()); else console.log(result.data()); } ); В 1с делаю следующим образом: ПараметрыПОСТ = "IBLOCK_TYPE_ID=bitrix_processes&IBLOCK_ID="+ИдСправочника; // WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2,"utf-8"); WinHttp.Open("POST",urlHook, Ложь); WinHttp.SetRequestHeader("Accept-Language", "ru"); WinHttp.SetRequestHeader("Accept-Charset","utf-8"); WinHttp.setRequestHeader("Content-Language", "ru"); WinHttp.setRequestHeader("Content-Charset", "utf-8"); WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");//application/x-www-form-urlencoded; charset=utf-8 WinHttp.Send(ПараметрыПОСТ);//ПараметрыПОСТ ТекстОтветаJSON = WinHttp.ResponseText(); Отрабатывает все корректно, но для добавления элемента справочника (другая функция) нужно в "ПараметрыПОСТ" Передать следующие данные: var params = { 'IBLOCK_TYPE_ID': 'bitrix_processes', 'IBLOCK_CODE': 'rest_1', 'ELEMENT_CODE': 'element_1', 'FIELDS': { 'NAME': 'Test element' } }; Есть идеи как передать структуру FIELDS в параметры пост? Пробовал передавать через запятую, в скобках, в фигурных и т.п., но в ответ получаю лишь Status 400 и {"error":"error_save_element","error_description":"Не введено название.\u003cbr\u003e"} |
|||
1
Имитация работы
28.06.17
✎
07:47
|
О, в php реализовали alert, клёво!
|
|||
2
Law_Of_Evi1
28.06.17
✎
07:59
|
На JS
|
|||
3
Имитация работы
28.06.17
✎
08:25
|
Fiddler что говорит про успешную передачу по помощи js?
|
|||
4
Law_Of_Evi1
28.06.17
✎
10:00
|
ОТВЕТ:
Для передачи подобной структуры: ПараметрыВСтруктуре = Новый Структура("IBLOCK_TYPE_ID, IBLOCK_ID, ELEMENT_CODE, FIELDS", "bitrix_processes", "276", "102903", новый Структура("NAME", "Test name element")); , которая имеет вложенную, накидал функцию, которая преобразует ее в строку нужного формата. Функция ПреобразоватьСтруктураПараметровВСтроку(Знач ПараметрыСтруктурой); ПараметрыСТрокой = ""; Для Каждого Стр Из ПараметрыСтруктурой Цикл Если ТипЗнч(Стр.Значение) = Тип("Структура") Тогда Для Каждого СтрПодчиненное Из Стр.Значение Цикл ПараметрыСТрокой = ПараметрыСТрокой+"&"+Стр.Ключ+"%5B"+СтрПодчиненное.Ключ+"%5D"+"="+СтрЗаменить(СтрПодчиненное.Значение," ","+"); КонецЦикла; Иначе ПараметрыСТрокой = ПараметрыСТрокой+"&"+Стр.Ключ+"="+СтрЗаменить(Стр.Значение," ","+"); КонецЕсли; КонецЦикла; Возврат ПараметрыСТрокой; КонецФункции |
|||
5
Имитация работы
28.06.17
✎
10:29
|
Вместо безумства, которое после Стр.Ключ+"=" передай просто значение, прикрытое урленкодом, который КодироватьСтроку со способом URLEncoding. Вместе со скобками {} которые у тебя %5B, и %5D. И пробелы там без тебя заменят.
Иначе зачем ты contenttype указывал? |
|||
6
Имитация работы
28.06.17
✎
10:30
|
со скобками []
сбил ты меня своим js |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |