首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有GET JSON文件的AngularJS服务

带有GET JSON文件的AngularJS服务
EN

Stack Overflow用户
提问于 2016-01-15 17:26:22
回答 2查看 128关注 0票数 0

我正在开发一个简单的示例AngularJS应用程序,它从外部JSON数据文件中读取数据。我已经尝试了所有的东西,但我找不到为什么应用程序不能工作。如有任何意见,将不胜感激。

“filmCtrl”控制:

代码语言:javascript
复制
angular
    .module('mediaApp')
    .controller('filmCtrl', function(filmList) {
        var vm = this;
        vm.films = filmList.retrieveFilms();
    });

“filmList”服务:

代码语言:javascript
复制
angular
    .module('mediaApp')
    .service('filmList', function($http) {

        var vm = this;

        vm.retrieveFilms = function() {
            return $http
                .get('films.json')
                .then(function(response) {
                    return response.films;
                });
        };

        return vm;
    });

杰森:

代码语言:javascript
复制
{
    "films":[
        {
            "title": "Reservoir Dogs",
            "director": "Quentin Tarantino",
            "year": "1992"
        },
        {
            "title": "2001: A Space Odyssey",
            "director": "Stanley Kubrick",
            "year": "1967"
        },
        {
            "title": "Memento",
            "director": "Christopher Nolan",
            "year": "2000"
        },
        {
            "title": "Enter the Dragon",
            "director": "Robert Clouse",
            "year": "1973"
        },

         [etc]...
    ]
}

所有这些文件都保存在同一个文件夹中,并包含在我的HTML文件中。JSON已经过验证。我哪里出错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-15 17:58:04

根据我的评论,您可以这样创建service -

代码语言:javascript
复制
mediaApp.service('filmList', ['$http',
function($http) {
    var vm = this;
    vm.retrieveFilms = function() {
        return $http.get('data.json');
    };
    return vm;
}]);

controller中,您可以使用这个service,比如-

代码语言:javascript
复制
mediaApp.controller('filmCtrl', function(filmList) {
    var vm = this;
    filmList.retrieveFilms().then(function(response) {
        vm.films =response.data.films;
    });
});

Plnkr - http://plnkr.co/edit/6RVlvdh8oG5WaiEHaPdM?p=preview

它将在FF中工作,但是对于某些浏览器,它会抛出CORS错误,所以在服务器上运行它更好。

票数 1
EN

Stack Overflow用户

发布于 2016-01-15 17:40:10

  1. then(response)中,响应对象具有以下属性:

data – {string|Object} --响应体通过转换函数进行转换。

响应的status – {number} - HTTP状态代码。

headers – {function([headerName])} -标头getter函数。

config – {Object} -用于生成请求的配置对象。

响应的statusText – {string} - HTTP状态文本。

所以这应该是

代码语言:javascript
复制
return $http
   .get('films.json')
   .then(function(response) {
      return response.data.films;
});

而不是

代码语言:javascript
复制
return $http
   .get('films.json')
   .then(function(response) {
      return response.films;
});

有关更多信息,请参见官方医生

  1. 如果您没有运行任何类型的with服务器,并且只是使用file://films.json,进行测试,那么您可能会遇到相同来源的策略问题。请参见:

政策

一些错误信息可能是有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34816559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档