我想使用carData.json
从服务器获取AngularJS
文件。
以下是我的结构:
我有一个services.js
文件(在js
forlder内),我保留了所有services
和factories
。以下是我用来从服务器获取factory
文件的carData.json
:
carApp.factory('getAllCars', function($http){
return {
get: function() {
return $http.get('data/carData.json');
}
};
});
我还有一个CarsByReviewCtrl
控制器,它将carData.json
文件用于其目的:
carApp.controller("CarsByReviewCtrl", function($scope, getAllCars) {
getAllCars.get().success(function(data){
$scope.allCars = data;
}).error(function(data, status, headers, config) {
alert("AJAX failed")
});
$scope.carList = [];
console.log($scope.allCars);
...
最后,这是我.html
文件的末尾,我传递了这些.js
文件。 (我在html
文件中间调用了控制器)
<script type="text/javascript" src="js/controllers/CarsByReviewCtrl.js"></script>
<script type="text/javascript" src="js/services.js"></script>
</body>
</html>
现在,如果我运行我的应用程序并打开控制台,我将得到undefined
的输出,而不是我从服务器获得的javascript对象。
我做错了什么,我该如何解决?
答案 0 :(得分:1)
问题是:console.log($scope.allCars)
在成功处理程序运行之前运行。
您可以将代码更改为:
carApp.controller("CarsByReviewCtrl", function($scope, getAllCars) {
getAllCars.get().success(function(data){
$scope.allCars = data;
console.log($scope.allCars);
}).error(function(data, status, headers, config) {
alert("AJAX failed")
});
$scope.carList = [];
...
答案 1 :(得分:1)
您正在尝试在解析HTTP请求之前打印$scope.allCars
的内容。
为您的代码添加了一些注释,以便解释您应该如何阅读它:
carApp.controller("CarsByReviewCtrl", function($scope, getAllCars) {
// first line of JS to be invoked
getAllCars.get().success(function(data){
// this will be executed later in time, after receiving the HTTP response (case success)
$scope.allCars = data;
}).error(function(data, status, headers, config) {
// this will be executed later in time, after receiving the HTTP response (case error)
alert("AJAX failed")
});
// this will be executed immediately after the previous JS line: getAllCars.get()
$scope.carList = [];
// this will be executed immediately after the previous JS line
console.log($scope.allCars);