Междоменный запрос $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
Разрешение CORS зависит от api.nestoria.co.uk.   -  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).успех(функция(данные) { console.log(данные);}); - 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

Установите Скрипач. Добавьте к нему пользовательское правило:

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

Это позволит вам делать междоменные запросы с локального хоста. Если API использует HTTPS, убедитесь, что вы включили «расшифровку HTTPS-трафика» в Fiddler.

Ссылка

-------------------- ОБНОВИТЬ

Ответ, который вы получаете, это JSON. Указание JSONP в качестве типа данных не сработает. Когда вы указываете JSONP, возврат должен быть функцией, а не объектом JSON.

JSONP

person uiwarrior    schedule 20.03.2014