可用的示例代码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开始就没有提到这个问题。
答案 0 :(得分:0)
在ie8 / 9中未完全实现CORS,因此这很可能是您的问题。这是关于它的msdn文章: