В моем приложении мы используем Restangular и $http для связи с серверным API.
Первый запрос (такой, как /BasicInfo.json на картинке) выполняется с использованием Restangular для получения исходной информации, такой как имя пользователя, а также используется числовой указатель на часть приложения (appId). Другие запросы используют эти данные для дальнейших вызовов, они выполняются только с помощью обычного сервиса $http.
Но конкретно в IE9 (не >=IE10, у меня также есть html5shiv) я получаю разрешенный ответ в виде строки символов, например:
[123,23,45,98,143,...]
Вот почему первая часть данных не обрабатывается должным образом, а другие вызовы не могут быть разрешены - см. «undefined» в URL-адресе на картинке. Второй и последующие вызовы используют следующие шаблоны для формирования URL.
//baseURL and docId - are available, while appId is not
$http.get(baseURL + '/api/' + appId + '/Subjects/' + docId + '.json')
.success(function(data){ deferred.resolve(data);
..
Эта строка на самом деле представляет собой список символов, содержащих правильный ответ сервера, но таким странным образом. Я нашел способ преобразовать его с помощью такой функции:
//numbersLine is that actual line [123,23,45,98,143,...]
var str = '',
convertedArray = Array(numbersLine)[0];
for (var i = 0; i < convertedArray.length; i++) {
str = str + String.fromCharCode(convertedArray[i]);
}
return str;
Но мне приходится делать это преобразование везде в приложении, где я работаю с данными API, из-за этого странного поведения IE9. Любые советы о том, что я могу проверить/изменить, будут очень признательны.
[UPD]
это настройка модуля
define([
'angular',
'./modulename',
'app/base/base-module',
//module definition via RequireJS
angular.module('app.modulename').config(
['$stateProvider', '$BasicProvider',
function ($stateProvider, $BasicProvider) {
$stateProvider.state('***', {
url: '***',
views : {
///
},
resolve : {
//here should get POJO with appid
resolvedBasicInfo : ["$Basic", function($Basic){
return $Basic.getBasicInfo();
}],
//later goest two other calls that require this appid
И сам базовый модуль имеет вызов Restangular
define([
'angular',
'restangular',
//other configs
], function( angular, Restangular ) {
'use strict';
return angular.module('effactsApp.base').provider('$Basic', function(){
return {
$get : ['Restangular', 'baseApiService', //other configs
function (Restangular, baseApiService) {
//
if(!basicInfoRestCall){
basicInfoRestCall = Restangular.one('BasicInfo');
}
@dhavalcengg, надеюсь, это дает представление