【发布时间】:2014-01-06 20:55:10
【问题描述】:
提供示例代码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 兼容性定义自定义操作的哪些附加参数?从 1.2.7 开始,Angular 开发者指南没有提到这个问题。
【问题讨论】:
-
感谢您为我指出如何使用 IE9 测试 plunk 的正确方向!
标签: json angularjs internet-explorer-8 internet-explorer-9 angularjs-resource