尝试从远程URL获取JSON时出错

时间:2016-09-21 13:35:32

标签: angularjs json http

我正在尝试从远程网址加载此json file。一开始我使用$ http.get函数,但是我收到了下一条错误消息:

  

CORS'Access-Control-Allow-Origin'

现在我正在使用JSONP,但没有任何反应。

service.js文件:

angular.module("elcomaApp").factory('ElcomaService', ['$http', function($http){
    return $http({
        method: 'JSONP',
        url: 'http://vagalumewifi.com.br/timeline.json'
    }).success(function(response){
        return response.data;
    }).error(function(err){
        return err;
    });

}]);

controller.js文件:

angular.module("elcomaApp", []).controller('MainController', ['$scope', 'ElcomaService', function($scope, ElcomaService){
    $scope.name = 'Natanael Santos';
    console.log($scope.name);
    ElcomaService.success(function(data){
        $scope.elcomaData = JSON.parse(data);
        var i = 0;
        for (x in $scope.elcomaData){

            console.log(i);
            i++;
            console.log(x.date);
        }
    }).error(function(data){
        console.log(data);
    });
}]);

app.js文件:

var app = angular.module("elcomaApp", ['ngMaterial', 'ngRoute']);

我已经阅读了很多关于stackoverflow的文章,但没有人为我工作。

2 个答案:

答案 0 :(得分:0)

我建议使用$http.jsonp(url)方法:

angular.module("elcomaApp").factory('ElcomaService', ['$http', function($http) {
  $http.jsonp('http://vagalumewifi.com.br/timeline.json')
    .success(function(data) {
      console.log(data); // you can't `return` here...
    }).error(function(err){
      console.err(err);
    });
}]);

注意:请注意,您不能指望异步方法中的return具有与同步环境中相同的行为......: - )

答案 1 :(得分:0)

您的原始错误是您的线索。端点服务器不允许从其他域访问。

CORS: Cross Origin Requests

您需要允许在端点服务器上访问您要使用的HTTP方法类型(即GET,POST,HEAD,...)此外,根据您正在执行的操作,您可能需要允许OPTIONS请求,请参阅上面MDN文档中的预检请求

如果您无法访问该服务器,则可能需要通过使 $ http 调用服务器上将为您提取文件的脚本来解决此问题。在使用PHP作为代理并使用PHP的 file_get_contents 函数从其他域的其他服务器获取文件之前,我已经完成了这项工作。