1. Программе 2 06.03.20 10:59 Сейчас в теме
приветсвую скажите пожалуйста кто нибудь решал задачу по формированию json в потоке, как это делается?
СтукрураВывода.Вставить("remember", False);
	СтукрураВывода.Вставить("status", True);
	//СтукрураВывода.Вставить("text", "");
	ЗаписьJSON = Новый ЗаписьJSON;
	//ЗаписьJSON.УстановитьСтроку();
	//ИмяФайла = ПолучитьИмяВременногоФайла("txt");
	ЗаписьJSON.ОткрытьПоток(Новый ПотокВПамяти, "UTF-8");
	ЗаписатьJSON(ЗаписьJSON, СтукрураВывода);
	СтрокаJSON = ЗаписьJSON.Закрыть();
	
Показать

строка json в этом случае пуста.
задача следующая вернуть json строку в utf-8
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. DJDUH 17 06.03.20 11:45 Сейчас в теме
(1) может как-то так, больше ничего не смог нарыть

        Поток = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Поток);
	
	//устанавливаем заголовки
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + Название + "; filename=" + ИмяФайла);
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: image/png");
	ЗаписьДанных.ЗаписатьСтроку("");

	ЗаписьДанных.Записать();
	ЗаписьДанных.Закрыть();

	Поток.ЗакрытьИПолучитьДвоичныеДанные();
Показать
2. succub1_5 89 06.03.20 11:41 Сейчас в теме
Проблема не в JSON/кодировке, а в потоке/памяти - там есть что-нибудь (в отладчике)?
4. Программе 2 08.03.20 20:22 Сейчас в теме
формирование ответа переделал, решил не парится с потоком, но ошибка осталась. итого получилось:
СтукрураВывода.Вставить("remember", Ложь);
	СтукрураВывода.Вставить("status", Истина);
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
	ЗаписатьJSON(ЗаписьJSON, СтукрураВывода);
	СтрокаJSON = ЗаписьJSON.Закрыть();	 	
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Очистить();
	Ответ.Заголовки.Вставить("Set-Cookie","token=" + ПользовательВебСайта.Токен + "; Max-Age="
		+ Формат(ПолучитьВремяЖизниАвторизацииВСекундах(), "ЧГ=0") + ";HttpOnly;SameSite;");  	
	Ответ.Заголовки.Вставить("result", result);	
	Ответ.УстановитьТелоИзСтроки(result, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
	Ответ.Заголовки.Вставить("Content-Type", "text/html; charset=UTF-8");
Показать
7. spacecraft 08.03.20 21:36 Сейчас в теме
(4)
Ответ.Заголовки.Вставить("Content-Type", "text/html; charset=UTF-8");

так ведь передавать строку в формате json нужно, а не html.
Ответ.Заголовки.Вставить("Content-Type", "application/json");


А с потоком какой смысл был затевать, если передавать строку нужно. Или нужно двоичные данные?
Если нужны именно двоичные данные, тогда нужно получать данные уже из потока. Они туда записывались, при открытии потока.
8. Программе 2 08.03.20 21:43 Сейчас в теме
(7)
application/json

это ошибка, при копирование кода сюда, на само деле там именно то что вы указали. была идея что надо именно текст забить в UTF-8 но это не помогло результат тот же.
пробовал уже много чего, и начинаю склонятся к тому что надо копать настройки веб-сервера, что там что-то не то, но я не понимаю куда копать.
9. spacecraft 08.03.20 21:45 Сейчас в теме
(8) ругается он на это:
Ответ.Заголовки.Вставить("result", result);
Он не ожидает в заголовках то, что должно быть в теле.
Просто убрать эту строку.
10. Программе 2 08.03.20 21:52 Сейчас в теме
(9)
и так я тоже пробовал
результат
Прикрепленные файлы:
12. spacecraft 08.03.20 21:54 Сейчас в теме
(10) так это совсем другая ошибка. И связана со структурой json.
Давайте полный код создания json и его результат строкой.
14. Программе 2 08.03.20 21:58 Сейчас в теме
(12)
СтукрураВывода = Новый Структура;
	СтукрураВывода.Вставить("remember", Ложь);
	СтукрураВывода.Вставить("status", Истина);
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
	ЗаписатьJSON(ЗаписьJSON, СтукрураВывода);
	СтрокаJSON = ЗаписьJSON.Закрыть();
	result = _VS_ОбщегоНазначения.JSON(СтукрураВывода); //это старый метод формирование вручную	 	
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Очистить();
	Ответ.Заголовки.Вставить("Set-Cookie","token=" + ПользовательВебСайта.Токен + "; Max-Age="
		+ Формат(ПолучитьВремяЖизниАвторизацииВСекундах(), "ЧГ=0") + ";HttpOnly;SameSite;");  	
	Ответ.Заголовки.Вставить("result", СтрокаJSON);	
	Ответ.Заголовки.Вставить("Content-Type", "application/json");
Показать

JSON выходе.
{
	"remember": false,
	"status": true
}
15. spacecraft 08.03.20 21:59 Сейчас в теме
(14) вот. А где главный элемент result?
Нужно отправляемые данные обернуть еще одной структурой.
18. Программе 2 08.03.20 22:10 Сейчас в теме
(15)
{
	"result": {
		"remember": false,
		"status": true
	}
}

если вы имеете ввиду так то не подходит. пишет ошибку вторую, даже если я отправляю ответ в загаловок или устанавливаю строку ответа в тело.
19. spacecraft 08.03.20 22:13 Сейчас в теме
(14) (18)
Да, оборачивать не нужно. Ошибка в ajax коде. Не увидел, где происходит парсинг json?
$.ajax('#', {
method: 'POST',
//async: true,
dataType: 'json',
data: data,
url: '<!---BASE_URL--->/authorization.html',
success: function(result) {
console.log(result);
var obj = JSON.parse(result);
if (obj.status === true) {
if (obj.remember === true) {
// тут код
}
Показать

Вот так по идее должно быть.
21. spacecraft 08.03.20 22:25 Сейчас в теме
(14)
Ответ.Заголовки.Вставить("result", СтрокаJSON);

Если это финальный код, то в нем снова эта ненужная строка.
А вот нужной не видно:
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
22. Программе 2 08.03.20 22:31 Сейчас в теме
(21) а я их там меняю местами пробую и так и так, и меня там вообще куча кода накоментировано.
так что я сразу пробую и так и по другому.
11. Программе 2 08.03.20 21:53 Сейчас в теме
(9)
наоборот тоже пробовал, тогда первая ошибка.
5. Программе 2 08.03.20 20:25 Сейчас в теме
ответ должен попасть вот сюда:

$.ajax('#', {
method: 'POST',
//async: true,
dataType: 'json',
data: data,
url: '<!---BASE_URL--->/authorization.html',
success: function(result) {
console.log(result);
if (result.status === true) {
if (result.remember === true) {
localStorage.setItem('loginViborGroup', data.login);
localStorage.setItem('passViborGroup', data.password); // нужно продумать, как сохранять пароль
}

window.location.replace("<!---BASE_URL--->/index.html");
} else {
$(".alert").html("Парам");
$(".alert").removeClass("hidden");
}
}
});

но в функцию он даже не доходит, и падает в ошибке:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/redirect.php?url=aHR0cDovLzE5Mi4xNjguMTkuMTE6ODYvYS9jcm0vZTFjc3lzL3Zyc2NvcmUvZXhjZXB0aW9uLnhzbHQ/c3lzdmVyPTguMy4xNi4xMTQ4"?><exception xmlns="http://v8.1c.ru/8.2/virtual-resource-system" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Exception" clsid="580392e6-ba49-4280-ac67-fcd6f2180121" reason="400"><descr xmlns="http://v8.1c.ru/8.1/data/core">Некорректные символы в заголовке HTTP: [result: {
"remember":false,
"status":true
}]</descr></exception>
6. Программе 2 08.03.20 20:26 Сейчас в теме
но он до туда даже не доходит, и падает до вызова функции с ошибкой:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/redirect.php?url=aHR0cDovLzE5Mi4xNjguMTkuMTE6ODYvYS9jcm0vZTFjc3lzL3Zyc2NvcmUvZXhjZXB0aW9uLnhzbHQ/c3lzdmVyPTguMy4xNi4xMTQ4"?><exception xmlns="http://v8.1c.ru/8.2/virtual-resource-system" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Exception" clsid="580392e6-ba49-4280-ac67-fcd6f2180121" reason="400"><descr xmlns="http://v8.1c.ru/8.1/data/core">Некорректные символы в заголовке HTTP: [result: {
"remember":false,
"status":true
}]</descr></exception>
13. spacecraft 08.03.20 21:56 Сейчас в теме
Скорее всего json начинается как массив, а ajax ожидает получить структуру.
16. spacecraft 08.03.20 22:01 Сейчас в теме
СтруктураДокумента = Новый Структура;
СтруктураДокумента.Вставить("result", СтукрураВывода);
ЗаписатьJSON(ЗаписьJSON, СтруктураДокумента );
17. spacecraft 08.03.20 22:07 Сейчас в теме
20. Программе 2 08.03.20 22:24 Сейчас в теме
Все равно не получается, все то же самое :'(

блин неделя убита в пустую, на такое простой задаче.
23. spacecraft 08.03.20 22:51 Сейчас в теме
Вот этот код попробуйте и сообщите ошибку, если она есть. Только ничего своего не добавляйте.
СтукрураВывода = Новый Структура;
    СтукрураВывода.Вставить("remember", Ложь);
    СтукрураВывода.Вставить("status", Истина);
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
    ЗаписатьJSON(ЗаписьJSON, СтукрураВывода);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Set-Cookie","token=" + ПользовательВебСайта.Токен + "; Max-Age="
        + Формат(ПолучитьВремяЖизниАвторизацииВСекундах(), "ЧГ=0") + ";HttpOnly;SameSite;");      
    Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Показать
24. Программе 2 08.03.20 22:58 Сейчас в теме
(23)
аписьJSON, СтукрураВывода);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Set-Cookie","token=" + ПользовательВебСайта.Токен + "; Max-Age="
+ Формат(ПолучитьВремяЖизниАвторизаци


если делать так как вы написали то возвращается html страницы, в ответе на запрос. Соответсвенно ошибка
Прикрепленные файлы:
25. spacecraft 08.03.20 23:14 Сейчас в теме
(24) уже хорошо.
Теперь изменим немного:
СтукрураВывода = Новый Структура;
    СтукрураВывода.Вставить("remember", Ложь);
    СтукрураВывода.Вставить("status", Истина);
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
    ЗаписатьJSON(ЗаписьJSON, СтукрураВывода);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Set-Cookie","token=" + ПользовательВебСайта.Токен + "; Max-Age="
        + Формат(ПолучитьВремяЖизниАвторизацииВСекундах(), "ЧГ=0") + ";HttpOnly;SameSite;");
    Ответ.Заголовки.Вставить("Content-Type", "application/json");      
    Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Показать
26. Программе 2 08.03.20 23:16 Сейчас в теме
(25)
СтукрураВывода.Вставить("remember", Ложь);
СтукрураВывода.Вставить("status", Истина);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
ЗаписатьJSON(ЗаписьJSON, СтукрураВывода);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Set-Cookie","token=" + ПользовательВебСайта.Токен + "; Max-Age="
+ Формат(ПолучитьВремяЖизниАвторизацииВСекундах(), "ЧГ=0") + ";HttpOnly;SameSite;");
Ответ.Заголовки.Вставить("Content-Type", "application/json");
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);

ну сопственно
Прикрепленные файлы:
27. spacecraft 08.03.20 23:21 Сейчас в теме
(26) вот на этом этапе нужно переходить в js код. И смотреть там.
Для пробы:
$.ajax('#', {
method: 'POST',
//async: true,
dataType: 'json',
url: '<!---BASE_URL--->/authorization.html',
success: function(result) {
console.log('OK');
}
}
Показать

Ошибка есть?
28. Программе 2 08.03.20 23:27 Сейчас в теме
(27)
console.log('OK');

да все то же самое
33. spacecraft 08.03.20 23:48 Сейчас в теме
(28) если тажа ошибка парсинга, тогда три варианта:
1. json не правильно формируется
2. он не отправляется вовсе.
3. на клиенте неправильно парсится.
35. spacecraft 08.03.20 23:51 Сейчас в теме
(28) тогда проверяйте получаемый ответ:
$.ajax('#', {
method: 'POST',
//async: true,
dataType: 'html',
url: '<!---BASE_URL--->/authorization.html',
success: function(result) {
console.log(result);
}
}
Показать
36. Программе 2 08.03.20 23:59 Сейчас в теме
(35)
dataType


html код возвращает.
37. spacecraft 09.03.20 00:00 Сейчас в теме
38. Программе 2 09.03.20 00:15 Сейчас в теме
(37)
Ребята спасибо, все нашел косяк.
в настройках апача кто-то из коллег додумался поставить кодировку windows, поправил конфиг теперь объект создается ну в постмане я его получил.

всем спасибо тему можно закрывать.
29. Программе 2 08.03.20 23:31 Сейчас в теме
Кстати стоит заметить если я перевожу на get то он перестает воспринимать json вообще и не хочет его принимать, из описание метода я так понял что так оно и должно быть, по этому выбрал post метод.
Я же правильно все понял?
30. starik-2005 3046 08.03.20 23:40 Сейчас в теме
(29) Для HTTP-сервисов 1С обработка get и post - это две разных функции HTTP-сервиса. Ставите в js GET - получаете вызов другой функции, которая ничего не возвращает.

Я бы, лично, на GETпереписал, если в 1С не передается ничего такого типа картинок или тонны текстов. А потом бы просто в браузере написал "http://server1c/base/hs/namehs/x/y/z" и получил бы json (или не получил бы).

Да, и накуа Вам там заголовки вообще в ответе?
34. Программе 2 08.03.20 23:49 Сейчас в теме
(30)
ну куки мне в любом случае нужны, в дальнейшем там должен передаваться доверительный сертификат выданный пользователю.
т.е. из js я буду должен вернуть в 1С логин, пароль, признак "Запомнить на странице" и доверительный сертификат.
31. spacecraft 08.03.20 23:44 Сейчас в теме
(29) вообще-то методы post и get выбираются в зависимости от того, нужно на сервер передавать данные или нет.
На сервер (1с) данные не передаются? Тогда get.
Обработка json не зависит от метода.
32. starik-2005 3046 08.03.20 23:45 Сейчас в теме
https://infostart.ru/public/516653/ - тут про бумеранг, который может помочь посмотреть что точно возвращает сервис (там есть равчик).
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот