IE9接收JSON响应作为Restangular中的一行CharCodes

时间:2015-01-28 09:26:48

标签: json angularjs internet-explorer-9 restangular angular-http

在我的应用程序中,我们使用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);
..

requests in the app

这一行实际上是包含正确服务器响应的Chars列表,但是这种方式很奇怪。我已经找到了使用这样的函数转换它的方法:

//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,希望它能给出这个想法

2 个答案:

答案 0 :(得分:0)

您是否尝试将$ http标头中的响应标头设置为 内容类型:application / json;字符集= UTF-8?

documentation for $http

答案 1 :(得分:0)

我偶尔会发现直接发生在我的案例中的问题:https://github.com/mozilla/pdf.js/issues/5429

这正是我的条件:

  • PDF.js + compatibility.js
  • AngularJS +路由器+ AJAX调用
  • IE9

导致XHR请求以不正确的方式加载数据。