从本地文件获取JSON的角度服务不起作用
Angular service to get JSON from local file not working
我尝试创建一个从本地JSON文件获取数据的服务,但它不起作用,也没有解释为什么不起作用。
plunkr在这里。这是我的服务代码:
webTestApp.factory('webtest', function($q, $timeout, $http) {
var Webtest = {
fetch: function(callback) {
var ret = function() {
$http.get('webtest.json').success(function(data) {
return data;
});
};
return ret();
}
};
return Webtest;
});
上面的Plunkr正是我在项目中所做的,但我分叉了另一个Plunkr,有人得到了同样的东西。我在这个StackOverflow答案中找到了它。
这是一个工作版本
webTestApp.factory('webtest', function($q, $timeout, $http) {
var Webtest = {
fetch: function(callback) {
var deferred = $q.defer();
$timeout(function() {
$http.get('webtest.json').success(function(data) {
deferred.resolve(data);
});
}, 30);
return deferred.promise;
}
};
return Webtest;
});
我的问题是,为什么我的版本(第一个块)不起作用,而第二个块起作用?
您使用ret
函数使它过于复杂。下面是您代码的简化版本,我只需返回$http调用返回的承诺:http://plnkr.co/edit/9VaqIuOVHyMI12Z0r3jm?p=preview
为了让你的版本正常工作,你的ret
函数需要返回一些东西($http是一个异步调用,所以它的成功并不重要——实际上回调返回了一些东西):
var ret = function() {
return $http.get('webtest.json').success(function(data) {
// this ^^ is the key
return data;
});
};
然后,当$http承诺被解析时,实际的数据内容在response.data
中,而不仅仅是response
(完整的response
实际上包含标头和其他与服务器调用相关的信息)。这是您的原始版本,包含这两个修复:http://plnkr.co/edit/mzsdTFWr3qAXGfizjRRC?p=preview
您编写的第二个示例之所以有效,是因为它返回了一个简单的$q promise(这就是为什么$scope.data
有效,而不需要$scope.data.data
),但它代表了一个反模式,所以您应该坚持原来的方法(或者使用我在第一段中给您的简化版本)。
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 角度控制器服务承诺不起作用
- 为什么从 Angular 服务中的对象中删除此元素不起作用
- 对SOAP服务的Preflight OPTIONS请求不起作用
- http的自定义服务不起作用
- AngularJs 简单的自定义服务不起作用
- 静态内容服务在快递中不起作用
- 为什么Angular的$http.get服务不起作用
- 移动 Web 服务不起作用
- 为什么当服务注入第二个控制器时,AngularJS 1.4.8 应用程序不起作用
- Firefox Addon Builder首选项-服务对我不起作用--为什么
- 从本地文件获取JSON的角度服务不起作用
- 角度模态>Ctrl+gt;服务>Ctrl继承不起作用
- Angular ui路由器在服务中保存到状态名称不起作用
- Angular Toast在我的服务中不起作用
- Azure移动服务javascript SDK在Firefox中不起作用
- 方法POST在向REST服务发送请求时不起作用
- Javascript web服务请求不起作用
- Angular.js http.get() 服务不起作用
- 绑定云铸造厂中的服务不起作用