powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / AngularJS. Данные сохраняются в неверной кодировке
25 сообщений из 32, страница 1 из 2
AngularJS. Данные сохраняются в неверной кодировке
    #39465494
Rishat1c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня проблема с отображением таблицы в csp, используется json + angularjs

Как можно решить эту проблему?
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465500
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rishat1c,

Ну, сейчас подождите местных телепатов, они придут и все вам объяснят. Но если вдруг не придут, на всякий случай поясните, как именно "используется". Проблема тут точно не в ангуларе, клиент работает в одной кодировке, а сервер в другой. В частности, сервер скорее всего выдает юникод, а клиент почему-то работает в win-1251.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465529
Rishat1c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

Делал по уроку с хабра ( линк: https://habrahabr.ru/company/intersystems/blog/204576/ )

Внимание! В спойлере содержится довольно таки 'большой' код
CSP файл:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
<!doctype html>
<html lang="ru" ng-app>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>REST Academy</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.3/angular.min.js"></script>
<script language="javascript">
function ctrl($scope,$http) {
	// Запрос GET к REST web API
	    $scope.getCompanies=function() {
        $http.get("/rest/json/companies").success(function(data) {
	         // Помещаем ответ сервера в переменную companies
            $scope.companies=data.children; 
        }).error(function(data, status) {
	             // Вывод информации об ошибке, если таковая возникнет
            alert("["+status+"] Ошибка при загрузки компаний! ["+data+"]");
        });
    };
   
   	// Создать новую компанию
	$scope.create = function (company){ 
	   $http.post("/rest/json/company",company) 
	   .success(function(data){$scope.getCompanies();$scope.alertzone="Добавили компанию "+company.Name;}).error(function(data,status){
		$scope.alertzone="["+status+"] Ошибка добавления компании :( ["+data+"]"; });
	}  

	// Обновить существующую компанию
   $scope.update = function (company){
	   $http.put("/rest/json/company/"+company.ID,company)
		.success(function(data){$scope.alertzone="Обновили компанию "+company.Name;}).error(function(data,status){ // поменял alert(....); на alertzone
		$scope.alertzone="["+status+"] Ошибка обновления имени компании :( ["+data+"]"; });
	}    
		    
	// Удалить компанию
	$scope.delete = function (company){
		$http.delete("/rest/json/company/"+company.ID)
		.success(function(data){$scope.getCompanies();$scope.alertzone="Удалили компанию "+company.Name;}).error(function(data,status){
			$scope.alertzone="["+status+"] Ошибка удаления компании :( ["+data+"]"; });
	}      
};
</script>
</head>
<body ng-controller="ctrl" ng-init="getCompanies();">

<h4 ng-model="alertzone"><font color=red>{{alertzone}}</font></h4>

<form name="compCreateForm" ng-model="company" ng-submit="create(company); company='';">
	Добавить компанию <input type="text" ng-model="company.Name"/>
	<input type="submit" value="Добавить"/>
</form>
<br>
<div ng-repeat="company in companies">
	<form name="compForm" ng-submit="update(company); compForm.$setPristine();">
		<input type="text" ng-model="company.Name"/>
		<input type="submit" value="Сохранить" ng-show="compForm.$dirty"/>
		<input type="button" value="X" ng-click="delete(company);"/>
	</form>
</div>

</body>
</html>



Класс Brocker:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
/// Брокер, Dispatch class веб-приложения
Class REST.Broker Extends %CSP.REST
{

/// Карта путей REST web API
XData UrlMap
{
<Routes>
 <Route Url="/test" Method="GET" Call="Test"/>
 <Route Url="/json/companies" Method="GET" Call="REST.JSON:GetAllCompanies"/>
 <Route Url="/json/company/:compid" Method="PUT" Call="REST.JSON:UpdateCompany"/> 
 <Route Url="/json/company/:compid" Method="DELETE" Call="REST.JSON:DeleteCompany"/> 
 <Route Url="/json/company" Method="POST" Call="REST.JSON:CreateCompany"/> 
</Routes>
}

ClassMethod Test() As %Status
{
	&html<Работает!>
	quit $$$OK
}

}




Класс JSON:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
/// Класс - набор  методов, вызываемых брокером.
/// Отдают данные в формате JSON
Class REST.JSON Extends %Base
{

/// Получение списка компаний
ClassMethod GetAllCompanies() As %Status
{
	
    set st=$$$OK
    try {
	// По умолчанию возвращает первые 100 записей. Для изменения надо добавить параметр pMaxRows
    do ##class(%ZEN.Auxiliary.jsonSQLProvider).%WriteJSONFromSQL(,"select * from Data.Company")
    } catch ex {
        set st=ex.AsStatus()
    }
    quit st
}

/// Создание нового объекта класса Data.Company
ClassMethod CreateCompany() As %Status
{
	s st=$$$OK
	try {
	// Берём JSON из запроса и конвертируем в объект класса Data.Company
	$$$THROWONERROR(st,##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(%request.Content,"Data.Company",.obj,1))
	// Сохраняем
	$$$THROWONERROR(st,obj.%Save())
	} 
	catch ex {
		s st=ex.AsStatus()
	}
	quit st
}

/// Удаляем объект класса Data.Company с cоответствующим id
ClassMethod DeleteCompany(compid As %String) As %Status
{
	set st=$$$OK
	try {
		$$$THROWONERROR(st,##class(Data.Company).%DeleteId(compid))
	} catch ex {
		s st=ex.AsStatus()
	}
	quit st
}

/// Изменяем объект класса Data.Company с cоответствующим id
ClassMethod UpdateCompany(compid As %String) As %Status
{
  set st=$$$OK
  try {
    
    $$$THROWONERROR(st,##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(%request.Content,,.obj,1))
    
    // Открываем объект, который хотим отредакнировать
    set comp=##class(Data.Company).%OpenId(compid)
    throw:comp=$$$NULLOREF ##class(%Exception.StatusException).CreateFromStatus($$$ERROR(5001,"Company does not exist"))

	// Редактируем и сохраняем
    set comp.Name=obj.Name
    $$$THROWONERROR(st,comp.%Save())
  } 
 catch ex {
    set st=ex.AsStatus()
  }
  quit st
}

}

...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465533
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rishat1c,

а версия Каше какая? С юникодом или без?
w $zv
что покажет?

Для начала удалите эту строчку
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465537
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rishat1c,

или в портале "О системе" что написано в строке "Локаль NLS:"
Если rusw, то юникод.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465541
Rishat1c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

w $zv
Cache for Windows (x86-64) 2017.1 (Build 792U_SU) Tue Mar 21 2017 11:38:57 EDT
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465543
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rishat1c,

Да, у вас юникод, вот это
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
точно правильно работать не будет.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465544
Rishat1c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

убрал строчку полностью, проблему это не решило ((
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465548
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rishat1c,

Убирания строчки charset=windows-1251" браузер закрывали? А то он иногда запоминает. И это нужно убрать из всех страниц, если есть. И еще, нужно бы проверить, что записалось в таблицах, возможно, оно просто в таблицах у вас данные в неправильной кодировке.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465554
Rishat1c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

да, и не только) Куки чистил, что только не делал, перезагружал.

Дело в том, что он и в Бд записывает криво. В БД хранится тоже с иероглифами (
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465556
Rishat1c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465564
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rishat1c,

Да, вижу. Сделал приложение, у меня тоже данные приходят уже переконвертированные в UTF8.
Можно, конечно, руками перед сохранением переконвертировать обратно, но это тупо.
Сейчас подумаю, была уже такая проблема. Правда, там база была win-1251. Не думал, что это не юникодовских базах тоже происходит.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465570
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rishat1cБлок А.Н.,

да, и не только) Куки чистил, что только не делал, перезагружал.

Дело в том, что он и в Бд записывает криво. В БД хранится тоже с иероглифами (А после того как убрали кодировку 1251, пробовали новые записи добавлять?
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465572
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Я пробовал, пока такое ощущение, что глючит.
Попробовал поиграться с параметрами CHARSET у класса Rest.Broker и у класса странички и не смог избавиться от лишней перекодировки в utf-8. раньше помогало, но rest я не использовал

Можно в метод CreateCompany добавить
s obj.Name=$zcvt(obj.Name,"I","UTF8")
Но это идиотизм
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465574
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Я пробовал, пока такое ощущение, что глючит.
Попробовал поиграться с параметрами CHARSET у класса Rest.Broker и у класса странички и не смог избавиться от лишней перекодировки в utf-8. раньше помогало, но rest я не использовал

Можно в метод CreateCompany добавить
s obj.Name=$zcvt(obj.Name,"I","UTF8")
Но это идиотизм
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465575
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть после этого оно работает, но ставить преобразование всех полей - полнейший бред.
Но именно с rest я не работал на практике.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465577
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должно работать нормально, если убрать везде упоминания о кодировках, либо добавить только на страницу явно кодировку utf-8.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465582
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

я всякие разные кодировки попробовал. Отдает все отлично в любой. На удивление даже разницы не видно.
Но упаковка объекта и отправка на сервер кривая (или прием со стороны сервера).
И я что-то думаю, что вот это вот
$http.post("/rest/json/company",company)
может лишнюю перекодировку делать. И дело не в Каше, а в ангуаре. Тем более, тут довольно старенький используется. Я бы поновее посоветовал попробовать, но у него синтаксис инициализации другой и на память я уже не помню, как его записать. У меня ночь и пару дней я не смогу в этом поразбираться.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465600
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати об AngularJS и Caché. Вот рекомендую большую серию статей на developer community .
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465714
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати об AngularJS и Caché.
Рекомендую Cache вообще не пользоваться, а из Angular не пользоваться AngularJS или, как ещё называют, Angular 1.
Angular 2 значительно отличается от 1 и не совместимо с 1 сверху вниз. Так что, начав c Angular 1, придётся потом переучиваться. Нет никакого смысла. Сейчас уже есть версия 4 (номер 3 пропущен). Поэтому, если кого интересует Angular, то начинать изучение с версии 2 или 4. Для этого надо искать другую документацию, чем та, что на developer community. Её достаточное количество на английском языке.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465726
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan MРекомендую Cache вообще не пользоваться,По AngularJS вы обосновали правильно, а по Caché нет, продолжайте, а мы послушаем.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39465846
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan MРекомендую Cache вообще не пользоваться
Т.е. если у нас стоит Кащей и нам приспичит поангулярить - Кащей нужно выкинуть и перейти на другую СУБД?

Или объяснить руководству, что с Кащеем ангуларить противопоказано и сослаться на тебя?

На какую СУБД тогда переходить, дабы ангулярить в свое удовольствие и без опаски?
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39466140
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M,

Ангулар в целом клиентская технология, а Каше - серверная. У них прям очень тоненькое пересечение и аргументов в пользу противопоказанности этой связи я не вижу.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39466366
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.противопоказанности этой связи я не вижу.
Погоди.
У нас тут специалист объявился, сейчас он нас по этому вопросу просветит.
...
Рейтинг: 0 / 0
AngularJS. Данные сохраняются в неверной кодировке
    #39467876
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал другую версию ангулара, все то же самое.
В общем, что получается. Ангулар кодирует данные в формате UTF, все вроде бы логично.
Вы читаете поток CSP.Request.Content, он не перекодируеся. Вроде бы тоже имеет под собой основание, потому что это по сути просто входной поток данных, еще никак не обработанный.
У меня самое простой способ получения вменяемых данных такой:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
/// Создание нового объекта класса Data.Company
ClassMethod CreateCompany() As %Status
{
	s st=$$$OK
	try {
		// Берём JSON из запроса и конвертируем в объект класса Data.Company
		s data= %request.Content.Read(1000000)
		$$$THROWONERROR(st,##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject($zcvt(data,"I","UTF8"),"Data.Company",.obj,1))
		// Сохраняем
		$$$THROWONERROR(st,obj.%Save())
	} 
	catch ex {
		s st=ex.AsStatus()
	}
	quit st
}


Сам лично я JSON не использовал, для меня удобнее оказалосьь использовать методы #server()#, а объекты в параметры превращать через JSON.stringify. А на форуме есть, кто JSON-ом пользуется на практике? Как делаете передачу объектов серверу?
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / AngularJS. Данные сохраняются в неверной кодировке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]