Междудомейн $http заявка AngularJS

Имам прост уебсайт, който изграждам с AngularJS, който извиква API за json данни.

Въпреки това получавам проблем с произхода на кръстосания домейн, има ли все пак около това, за да позволи заявки за кръстосани домейни?

грешка:

XMLHttpRequest не може да зареди http://api.nestoria.co.uk/api?country=uk&pretty=1&action=search_listings&place_name=soho&encoding=json&listing_type=rent. Няма заглавка „Access-Control-Allow-Origin“ на заявения ресурс. Следователно достъпът до „http:// localhost“ не е разрешен.

  searchByPlaceName: function() { 
        var url = baseurl+'country=uk&pretty=1&action=search_listings&place_name=london'+encoding+type;
         return $http.get(url);
    }

person Tom    schedule 20.03.2014    source източник
comment
От api.nestoria.co.uk зависи дали ще разреши CORS   -  person Explosion Pills    schedule 21.03.2014


Отговори (2)


Изглежда, че api.nestoria.co.uk не позволява CORS. Трябва да зададе самата заглавка Access-Control-Allow-Origin -- нямате пряк контрол върху това.

Можете обаче да използвате JSONP. Този сайт го позволява чрез параметъра на заявката callback.

$http.jsonp(baseurl+'country=uk&pretty=1&action=search_listings&place_name=london'
    +encoding+type + "&callback=JSON_CALLBACK")
person Explosion Pills    schedule 20.03.2014
comment
трябва да предоставите функция за обратно извикване на jsonp. $http.jsonp(url+&callback=JSON_CALLBACK).success(function(data) { console.log(data); }); - person huocp; 21.03.2014
comment
@huocp, коментарът ти има смисъл... Все още обаче получавам грешката, спомената от Том Uncaught SyntaxError - person Michael Merchant; 13.12.2014
comment
@Tom променете и формата на отговор на API на JSONP. :) - person Wreeecks; 16.02.2015
comment
@Explosion Pills Ако използвах JSONP, отговорът не идва като JSON формат. той е във формата js файл в отговор - person karthik pamidimarri; 24.02.2015

Инсталирайте Fiddler. Добавете персонализирано правило към него:

static function OnBeforeResponse(oSession: Session)
{
    oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");
}

Това ще ви позволи да правите междудомейн заявки от localhost. Ако API е HTTPS, уверете се, че сте активирали „дешифриране на HTTPS трафик“ във fiddler.

Справка

-------------------- АКТУАЛИЗАЦИЯ

Отговорът, който получавате, е JSON. Посочването на JSONP като тип данни няма да работи. Когато посочите JSONP, връщането трябва да бъде функция, а не JSON обект.

JSONP

person uiwarrior    schedule 20.03.2014