AngularJS 1.2.7 IE8资源错误

时间:2014-01-06 20:55:11

标签: json angularjs internet-explorer-8 internet-explorer-9 angularjs-resource

可用的示例代码here& here。由于Plunker不能很好地支持IE8或IE9,因此可以通过在现代Web浏览器中打开Plunker示例然后在单独的窗口中启动“运行”窗格并在IE8或IE9中打开该URL来运行示例代码。

使用$ resource.query或$ resource.get进行RESTful调用时,如果定义并使用了自定义操作,则promise无法在IE8或IE9上返回任何结果:

factory('ResourceService2', ['$resource', '$q', function($resource, $q) {
    var factory = {
        query: function() {
            var deferred = $q.defer();

            $resource('data.json', {'cacheSlayer' : new Date().getTime()}, {
                'query': { 
                    method: 'GET', 
                    responseType: 'json',
                    isArray: true
            }}).query(function (data) {
                deferred.resolve(data);
            });

            return deferred.promise;
        }
    };
    return factory;
}]).

查询():

ResourceService2.query().then(function (response) {
    $scope.resource2Rows = response;
});

但是,当未定义或使用自定义操作时,同一调用会成功返回结果:

factory('ResourceService', ['$resource', '$q', function($resource, $q) {
    var factory = {
        query: function() {
            var deferred = $q.defer();

            $resource('data.json', {
                'cacheSlayer' : new Date().getTime()
            }, {}).query(function (data) {
                deferred.resolve(data);
            });

            return deferred.promise;
        }
    };
    return factory;
}]).

查询():

ResourceService.query().then(function (response) {
    $scope.resourceRows = response;
});

使用$ http也很成功:

factory('HttpService', ['$http', '$q', function($http, $q) {
    var factory = {
        query: function() {
            var deferred = $q.defer();

            $http.get('data.json', {
                params: {
                    'cacheSlayer' : new Date().getTime()
            }}).success(function (data) {
                deferred.resolve(data);
            });

            return deferred.promise;
        }
    };
    return factory;
}]).

的get():

HttpService.query().then(function (response) {
    $scope.httpRows = response;
});

这是IE8 / IE9中的错误吗?必须为IE8 / IE9兼容性定义哪些自定义操作的附加参数? Angular Developer's Guide从1.2.7开始就没有提到这个问题。

1 个答案:

答案 0 :(得分:0)

在ie8 / 9中未完全实现CORS,因此这很可能是您的问题。这是关于它的msdn文章:

http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx