приветсвую скажите пожалуйста кто нибудь решал задачу по формированию json в потоке, как это делается?
строка json в этом случае пуста.
задача следующая вернуть json строку в utf-8
СтукрураВывода.Вставить("remember", False);
СтукрураВывода.Вставить("status", True);
//СтукрураВывода.Вставить("text", "");
ЗаписьJSON = Новый ЗаписьJSON;
//ЗаписьJSON.УстановитьСтроку();
//ИмяФайла = ПолучитьИмяВременногоФайла("txt");
ЗаписьJSON.ОткрытьПоток(Новый ПотокВПамяти, "UTF-8");
ЗаписатьJSON(ЗаписьJSON, СтукрураВывода);
СтрокаJSON = ЗаписьJSON.Закрыть();
Показатьстрока json в этом случае пуста.
задача следующая вернуть json строку в utf-8
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) может как-то так, больше ничего не смог нарыть
Поток = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Поток);
//устанавливаем заголовки
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + Название + "; filename=" + ИмяФайла);
ЗаписьДанных.ЗаписатьСтроку("Content-Type: image/png");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Записать();
ЗаписьДанных.Закрыть();
Поток.ЗакрытьИПолучитьДвоичныеДанные();
Показать
формирование ответа переделал, решил не парится с потоком, но ошибка осталась. итого получилось:
СтукрураВывода.Вставить("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");
Показать
(4)
так ведь передавать строку в формате json нужно, а не html.
А с потоком какой смысл был затевать, если передавать строку нужно. Или нужно двоичные данные?
Если нужны именно двоичные данные, тогда нужно получать данные уже из потока. Они туда записывались, при открытии потока.
Ответ.Заголовки.Вставить("Content-Type", "text/html; charset=UTF-8");
так ведь передавать строку в формате json нужно, а не html.
Ответ.Заголовки.Вставить("Content-Type", "application/json");
А с потоком какой смысл был затевать, если передавать строку нужно. Или нужно двоичные данные?
Если нужны именно двоичные данные, тогда нужно получать данные уже из потока. Они туда записывались, при открытии потока.
(7)
это ошибка, при копирование кода сюда, на само деле там именно то что вы указали. была идея что надо именно текст забить в UTF-8 но это не помогло результат тот же.
пробовал уже много чего, и начинаю склонятся к тому что надо копать настройки веб-сервера, что там что-то не то, но я не понимаю куда копать.
application/json
это ошибка, при копирование кода сюда, на само деле там именно то что вы указали. была идея что надо именно текст забить в UTF-8 но это не помогло результат тот же.
пробовал уже много чего, и начинаю склонятся к тому что надо копать настройки веб-сервера, что там что-то не то, но я не понимаю куда копать.
(12)
JSON выходе.
СтукрураВывода = Новый Структура;
СтукрураВывода.Вставить("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
}
(14) (18)
Да, оборачивать не нужно. Ошибка в ajax коде. Не увидел, где происходит парсинг json?
Вот так по идее должно быть.
Да, оборачивать не нужно. Ошибка в 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) {
// тут код
}
ПоказатьВот так по идее должно быть.
ответ должен попасть вот сюда:
$.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>
$.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>
но он до туда даже не доходит, и падает до вызова функции с ошибкой:
<?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>
<?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>
Вот этот код попробуйте и сообщите ошибку, если она есть. Только ничего своего не добавляйте.
СтукрураВывода = Новый Структура;
СтукрураВывода.Вставить("remember", Ложь);
СтукрураВывода.Вставить("status", Истина);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
ЗаписатьJSON(ЗаписьJSON, СтукрураВывода);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Set-Cookie","token=" + ПользовательВебСайта.Токен + "; Max-Age="
+ Формат(ПолучитьВремяЖизниАвторизацииВСекундах(), "ЧГ=0") + ";HttpOnly;SameSite;");
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Показать
(23)
если делать так как вы написали то возвращается html страницы, в ответе на запрос. Соответсвенно ошибка
аписьJSON, СтукрураВывода);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Set-Cookie","token=" + ПользовательВебСайта.Токен + "; Max-Age="
+ Формат(ПолучитьВремяЖизниАвторизаци
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Set-Cookie","token=" + ПользовательВебСайта.Токен + "; Max-Age="
+ Формат(ПолучитьВремяЖизниАвторизаци
если делать так как вы написали то возвращается html страницы, в ответе на запрос. Соответсвенно ошибка
Прикрепленные файлы:
(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);
Показать
(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);
СтукрураВывода.Вставить("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);
ну сопственно
Прикрепленные файлы:
Кстати стоит заметить если я перевожу на get то он перестает воспринимать json вообще и не хочет его принимать, из описание метода я так понял что так оно и должно быть, по этому выбрал post метод.
Я же правильно все понял?
Я же правильно все понял?
(29) Для HTTP-сервисов 1С обработка get и post - это две разных функции HTTP-сервиса. Ставите в js GET - получаете вызов другой функции, которая ничего не возвращает.
Я бы, лично, на GETпереписал, если в 1С не передается ничего такого типа картинок или тонны текстов. А потом бы просто в браузере написал "http://server1c/base/hs/namehs/x/y/z" и получил бы json (или не получил бы).
Да, и накуа Вам там заголовки вообще в ответе?
Я бы, лично, на GETпереписал, если в 1С не передается ничего такого типа картинок или тонны текстов. А потом бы просто в браузере написал "http://server1c/base/hs/namehs/x/y/z" и получил бы json (или не получил бы).
Да, и накуа Вам там заголовки вообще в ответе?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот