为什么Angular JS $ http.get()在这段代码中不起作用?

时间:2015-12-03 18:13:49

标签: javascript angularjs

我正在尝试从链接获取RSS源。 ng-click函数getNews("SomeText")正在运行,我已经通过填充带有一些文本的容器来确认它。但是,$http.get()无效。我现在只想显示数据,我稍后会解析它。

这是我的Angular JS代码。

var app = angular.module("app",[]);
app.controller("newsController", function($scope, $http) {
  $scope.getNews = function(topic) {

    if (topic === "NAmerica") {
    //The program enters this part, I have confirmed, only $http.get() doesn't work
      $http.get('http://www.usnews.com/rss/education')
      .then(function (response) {
        $scope.message = response;

      });
    }
  };
});

我的HTML文件具有以下结构:

<html ng-app="app">
   <body ng-controller="newsContainer">
       <a href="#" id="NAmerica" ng-click="getNews('NAmerica')">US &amp; Canada</a>
       <p> {{message}} </p>
   </body>
</html>

1 个答案:

答案 0 :(得分:1)

正如评论中已经提到的,现代浏览器不能简单地通过AJAX请求任意URL。这种限制完全是故意的,称为Same-Origin Policy。默认情况下,浏览器只能对执行JavaScript的同一域执行AJAX请求。

通常,您可以选择几个选项。

  1. 当请求的站点在其HTTP响应中包含跨源资源共享(CORS)标头时,允许跨域请求,该标头通常如下所示:

    urxvt

    当然,当您控制要从中请求内容的域时,这只是一个选项。如果您正在向第三方网站执行请求,通常您无法自行完成此任务。

    顺便说一下,您还应该能够在浏览器控制台中看到相应的错误消息。

  2. 使用域上的服务器端脚本请求外部内容,例如在 your <上使用PHP或 [在此处插入随机服务器端脚本语言] 脚本/ em>然后通过AJAX请求的服务器。这样,您可以解决同源策略,因为用户的浏览器现在可以在您自己的域中请求资源。