IE9 получает ответ JSON в виде строки CharCodes в Restangular.

В моем приложении мы используем 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, надеюсь, это дает представление


person shershen    schedule 28.01.2015    source источник
comment
Можете ли вы опубликовать код, когда вы устанавливаете appid для своего приложения? Также ответ, который вы получаете при отправке запроса на это.   -  person dhavalcengg    schedule 31.01.2015


Ответы (2)


Вы пытались установить заголовок ответа в заголовке $http для Content-type: application/json; кодировка = utf-8?

https://docs.angularjs.org/api/ng/service/$http#get

person Rinrub    schedule 02.02.2015
comment
$http выполняется через сервисы Restangular и $http; установка правильная, так как она работает во всех других браузерах, а также в IE11 и IE10 - person shershen; 02.02.2015

Иногда я обнаруживал проблему, которая возникла непосредственно в моем случае: https://github.com/mozilla/pdf.js/issues/5429

У меня были именно такие условия:

  • PDF.js + совместимость.js
  • AngularJS + маршрутизатор + вызовы AJAX
  • IE9

Что привело к запросу XHR на загрузку данных некорректным образом.

person shershen    schedule 24.02.2015