javascript - AngularJS 错误 : Blocked loading resource from url not allowed by $sceDelegate policy

标签 javascript angularjs angularjs-1.6

我目前正在学习 AngularJS 中的教程。这是我的 controllers.js 文件中的代码。

'use strict';

angular.module ( 'F1FeederApp.controllers' , []                                     )
.controller    ( 'driversController'       , function ( $scope , ergastAPIservice ) {

    $scope.nameFilter = null;
    $scope.driversList = [];

    ergastAPIservice.getDrivers ().success ( function ( response ) {
        $scope.driversList = response.MRData.StandingsTable.StandingsLists [ 0 ].DriverStandings;
    });
});

我收到以下错误:

1) 阻止从 $sceDelegate 策略不允许的 url 加载资源。

2) TypeError: ergastAPIservice.getDrivers(...).success 不是函数

我完全不确定是什么导致了这些错误,我是 Angular 的新手。我在我的例子和其他例子之间看到的唯一可能的区别是在这个代码块中:( services.js )

'use strict';

angular.module ( 'F1FeederApp.services' , []                 )
.factory       ( 'ergastAPIservice'     , function ( $http ) {

    var ergastAPI = {};

    ergastAPI.getDrivers = function () {
        return $http ({
            method : 'JSONP' ,
            url    : 'http://ergast.com/api/f1/2013/driverStandings.json?callback=JSON_CALLBACK'
        });
    };

    return ergastAPI;
});

我注意到的不同之处在于,在我的 getDrivers 函数末尾有一个分号,并且我在文件顶部也有 use strict 语句。但是,grunt 拒绝在没有这两行的情况下运行应用程序,所以我认为这不是问题所在。

如果有人能在这里指出正确的方向,我将不胜感激。

最佳答案

问题#1:

您尝试从您的应用请求的url 不安全 根据 AngularJS sceDelegatePolicy .要解决它,您需要 使用 resourceUrlWhitelist 方法将您应用中的网址列入白名单 在 $sceDelegateProvider 如下图:

angular.module('myApp', []).config(function($sceDelegateProvider) {  
$sceDelegateProvider.resourceUrlWhitelist([
    // Allow same origin resource loads.
    'self',
    // Allow loading from our assets domain. **.
    'http://ergast.com/**'
  ]);

为清楚说明,以上示例来自 here

问题 #2:

错误 TypeError: ergastAPIservice.getDrivers(...).success is not a function 的问题可能是由于您使用的 AngularJS 版本所致。遗留的 .success/.error 方法现在在最新的 AngularJs 1.6 版本中被弃用。这是 Deprecation notice 如果您使用的是最新的 AngularJs,这可能是原因,否则,我们需要更多信息来调试问题。

关于javascript - AngularJS 错误 : Blocked loading resource from url not allowed by $sceDelegate policy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41642646/

相关文章:

javascript - 将 Mediator 模式与 webpack 和 ES6 模块导入导出结合使用

javascript - 计算 2 个数组中出现了多少个相同的元素

javascript - 从GEvent获取 "i"的值

angularjs - $watch是在init之后直接触发的,为什么呢?

javascript - AngularJS - 如何在没有 HTML 元素的情况下使用 ng-if

javascript - $scope.apply 正在触发 "catch"以及 "then"

javascript - 将字符串树转换为数组

angularjs - ionic 事件不会触发内部指令

javascript - Angular 1.6 中可能未处理的拒绝

angularjs - 为什么 AngularJS $http success/error 方法被弃用?从 v1.6 中删除?