Почему Angular JS $ http.get () не работает в этом коде?

0

Я пытаюсь получить RSS-каналы из ссылки. Функция getNews("SomeText") ng-click getNews("SomeText") работает, я подтвердил ее заполнением контейнера некоторым текстом. Однако $http.get() не работает. Пока я хочу показать данные только сейчас, я проанализирую их позже.

Вот мой Угловой код 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>
  • 0
    Любая консольная ошибка?
  • 2
    Одинаковая политика происхождения?
Показать ещё 9 комментариев
Теги:

1 ответ

1
Лучший ответ

Как уже отмечалось в комментариях, современные браузеры не могут просто запрашивать произвольные URL-адреса через AJAX. Это ограничение является полностью преднамеренным и называется политикой одного и того же происхождения. По умолчанию браузеры могут выполнять только запросы AJAX в том же домене, в котором выполняется JavaScript.

Обычно есть несколько вариантов, которые вы можете предпринять.

  1. Междоменные запросы разрешены, когда запрашиваемый сайт содержит заголовок совместного использования ресурсов (CORS) в HTTP-ответе, который обычно выглядит примерно так:

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

    Конечно, это только вариант, когда вы контролируете домен, из которого вы запрашиваете контент. Если вы выполняете запросы на сторонний сайт, вы обычно ничего не можете сделать по этому поводу.

    Кстати, вы также должны увидеть соответствующее сообщение об ошибке в консоли вашего браузера.

  2. Запросите зарубежный контент, используя серверный скрипт в вашем домене, например, используя скрипт PHP или [вставить случайный серверный скриптовый язык здесь] на свой сервер, который вы затем запрашиваете через AJAX. Таким образом, вы можете обойти политику одинакового происхождения, так как пользовательский браузер теперь может запрашивать ресурс в вашем собственном домене.

  • 0
    Я не знал о политике одного происхождения. Итак, вы предлагаете мне лучше попросить мой сервер запустить скрипт, который получает ответ, и переслать его клиенту?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню