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

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

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

Делал по уроку с хабра ( линк: 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
04.06.2017, 18:39
    #39465533
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AngularJS. Данные сохраняются в неверной кодировке
Rishat1c,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ангулар в целом клиентская технология, а Каше - серверная. У них прям очень тоненькое пересечение и аргументов в пользу противопоказанности этой связи я не вижу.
...
Рейтинг: 0 / 0
06.06.2017, 08:39
    #39466366
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AngularJS. Данные сохраняются в неверной кодировке
Блок А.Н.противопоказанности этой связи я не вижу.
Погоди.
У нас тут специалист объявился, сейчас он нас по этому вопросу просветит.
...
Рейтинг: 0 / 0
07.06.2017, 14:50
    #39467876
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AngularJS. Данные сохраняются в неверной кодировке
Попробовал другую версию ангулара, все то же самое.
В общем, что получается. Ангулар кодирует данные в формате 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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / AngularJS. Данные сохраняются в неверной кодировке / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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