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

标签 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>

最佳答案

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

通常,您可以采取几种选择。

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

    Access-Control-Allow-Origin: http://yoursite.com
    

    当然,这只是当您控制所请求内容的域时的一个选项。如果您正在向第 3 方站点执行请求,通常您自己无能为力。

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

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

关于javascript - 为什么 Angular JS $http.get() 在此代码中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073281/

相关文章:

javascript - 加载页面并在单个书签中应用 javascript

javascript - 为什么大多数营销标签(Omniture、XE 等)都是用 document.write() 编写的?

javascript - 在 jquery 中的类名中使用点 : $ ('.B.Avf' ).toggle();

html - ng-bind-html 指令在呈现时删除样式属性

javascript - Angular Highcharts 从多对象元素读取

javascript - 如何从 D3.js 图表读取(获取)Y 轴刻度值?

javascript - 等待用户点击而不是页面加载来启动功能

javascript - QueryReadStore 将 JSON 加载到 DataGrid 中,但 JsonRestStore 不会(来自同一来源)

javascript - IF 语句中的返回值

javascript - 表格 HTML 中的动态数组