此代碼適用於除Safari之外的每個瀏覽器(我還沒有在IE中測試過)。
我使用的UI路由器決心打電話給我的API和數據傳遞到我的控制器:
.state('gallery.views', {
url: "/{gallery:shades-of-gray|color}",
views: {
'[email protected]': {
templateUrl: 'components/gallery/partials/gallery-slick.html',
controller: 'SliderController'
},
'[email protected]': {
templateUrl: 'components/gallery/partials/gallery-img.html',
controller: 'GalleryImgController'
}
},
resolve: {
apiFactory: 'apiFactory',
drawings: function(apiFactory, $stateParams){
console.log(Date.now() + " in resolve!");
var param = $stateParams.gallery === 'color' ? 'color' : 'bw';
return apiFactory.getImageUrls(param)
.then(function(result){
console.log(Date.now() + " resolved!");
return result.data.gallery;
});
}
}
});
這裏有兩個控制器的重要組成部分:
.controller('SliderController', function($scope, drawings){
$scope.drawings = drawings;
...
}
.controller('GalleryImgController', function($scope, drawings){
$scope.currentDrawing = drawings[0];
...
}
我的API工廠:
apiFactory.getImageUrls = function(gallery){
console.log(Date.now() + " in getImageUrls with gallery " + gallery);
if (gallery === undefined)
var gallery = 'all'
return $http({
method: 'GET',
url: API_URL + '/drawings/' + gallery
});
};
此代碼可在Firefox和Chrome中完美執行:
1451686464870 in resolve! gallery.js:26:1
1451686464870 in getImageUrls with gallery bw api.js:69:1
1451686465891 resolved!
然而,在Safari,我等待120秒當我使$ HTTP請求,並在承諾解決之間。我知道問題不在服務器端,因爲我記錄了請求(也就是解決問題時的120秒)。
1451686493868 in resolve!
1451686493868 in getImageUrls with gallery bw
1451686614736 resolved!
這是我的錯誤:52
Error: undefined is not an object (evaluating 'drawings')
http://localhost:3000/components/gallery/gallery.js:52:34
[email protected]://localhost:3000/bower_components/angularjs/angular.js:4478:22
[email protected]://localhost:3000/bower_components/angularjs/angular.js:4486:33
http://localhost:3000/bower_components/angularjs/angular.js:9151:39
http://localhost:3000/bower_components/ui-router/release/angular-ui-router.min.js:7:23334
[email protected]://localhost:3000/bower_components/angularjs/angular.js:8789:15
[email protected]://localhost:3000/bower_components/angularjs/angular.js:8289:23
[email protected]://localhost:3000/bower_components/angularjs/angular.js:7680:23
[email protected]://localhost:3000/bower_components/angularjs/angular.js:7555:45
[email protected]://localhost:3000/bower_components/ui-router/release/angular-ui-router.min.js:7:22679
http://localhost:3000/bower_components/ui-router/release/angular-ui-router.min.js:7:23001
[email protected]://localhost:3000/bower_components/angularjs/angular.js:8789:15
[email protected]://localhost:3000/bower_components/angularjs/angular.js:8289:23
[email protected]://localhost:3000/bower_components/angularjs/angular.js:7680:23
[email protected]://localhost:3000/bower_components/angularjs/angular.js:7555:45
http://localhost:3000/bower_components/ui-router/release/angular-ui-router.min.js:7:23479
[email protected]://localhost:3000/bower_components/angularjs/angular.js:8789:15
[email protected]://localhost:3000/bower_components/angularjs/angular.js:8289:23
[email protected]://localhost:3000/bower_components/angularjs/angular.js:7680:23
[email protected]://localhost:3000/bower_components/angularjs/angular.js:7555:45
[email protected]://localhost:3000/bower_components/ui-router/release/angular-ui-router.min.js:7:22679
http://localhost:3000/bower_components/ui-router/release/angular-ui-router.min.js:7:22946
[email protected]://localhost:3000/bower_components/angularjs/angular.js:16311:33
http://localhost:3000/bower_components/ui-router/release/angular-ui-router.min.js:7:18565
[email protected]://localhost:3000/bower_components/angularjs/angular.js:14745:30
http://localhost:3000/bower_components/angularjs/angular.js:14761:39
[email protected]://localhost:3000/bower_components/angularjs/angular.js:15989:28
[email protected]://localhost:3000/bower_components/angularjs/angular.js:15800:36
[email protected]://localhost:3000/bower_components/angularjs/angular.js:16097:31
[email protected]://localhost:3000/bower_components/angularjs/angular.js:10546:53
[email protected]://localhost:3000/bower_components/angularjs/angular.js:10744:15
[email protected]://localhost:3000/bower_components/angularjs/angular.js:10685:24
(anonymous function)angular.js:12476
(anonymous function)angular.js:9245
invokeLinkFnangular.js:8790
nodeLinkFnangular.js:8288
compositeLinkFnangular.js:7679
publicLinkFnangular.js:7554
kangular-ui-router.min.js:6:22679
(anonymous function)angular-ui-router.min.js:6:23001
invokeLinkFnangular.js:8788
nodeLinkFnangular.js:8288
compositeLinkFnangular.js:7679
publicLinkFnangular.js:7554
(anonymous function)angular-ui-router.min.js:6:23479
invokeLinkFnangular.js:8788
nodeLinkFnangular.js:8288
compositeLinkFnangular.js:7679
publicLinkFnangular.js:7554
kangular-ui-router.min.js:6:22679
(anonymous function)angular-ui-router.min.js:6:22946
$broadcastangular.js:16310
(anonymous function)angular-ui-router.min.js:6:18565
processQueueangular.js:14744
(anonymous function)angular.js:14760
$evalangular.js:15988
$digestangular.js:15799
$applyangular.js:16096
doneangular.js:10545
completeRequestangular.js:10743
requestLoadedangular.js:10684
線路在GalleryImgController
。
您可能**認爲**問題不是服務器端,但它可能是。什麼是服務器端代碼看起來像 –
120秒似乎是一個2分鐘的HTTP超時 - 檢查,如果'result.data'爲空 –
@JaromandaX你是正確的。問題出現在我的Express服務器上:'res.sendStatus(200).json(ret)',應該是'res.status(200).json(ret)'。 'res.sendStatus()'將HTTP標頭附加到主體。 – wdonahoe