2016-02-04 4 views
2

Я использую следующий код для получения сведений о местоположении из API Google.Проблема с перекрестным доменом в Google API с использованием angularJs

Мой код:

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position){ 
     $scope.$apply(function(){ 
     $http.get('http://maps.googleapis.com/maps/api/geocode/json?latlng='+position.coords.latitude+','+position.coords.longitude+'&sensor=true').then(function(res){ 
      alert(res.data); 
     }); 


     }); 
    }); 
    } 

Когда я пытаюсь этот код я получаю домен Ошибка Cross.

Моя ошибка:

XMLHttpRequest cannot load http://maps.googleapis.com/maps/api/geocode/json?latlng=8.5663029,76.8916023&sensor=true. Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response. 

Пожалуйста, предложите решить эту проблему

+0

Сначала необходимо добавить заголовок авторизации. ваш запрос должен быть '$ http.jsonp' или do 'method: 'JSONP'' –

+0

' Поле заголовка запроса разрешено' - проблема может быть что-то? добавляет заголовок запроса 'Авторизация' ... google не нравится, похоже ... CORS обычно не проблема с этим вызовом API –

+0

@ParthTrivedi' Вам нужно сначала добавить заголовок авторизации' ... проблема это наличие заголовка авторизации !! а не его отсутствие –

ответ

2

Вы посылающий Authorization заголовок ... который вызывает предполетную проверку CORS, и Google не нравится заголовок авторизации

вам необходимо удалить этот заголовок из вызова API

посмотреть, если это помогает

$http.get("your long url", {headers: {Authorization: undefined}}) 

, очевидно, я заменил фактический URL для удобочитаемости

Я также видел следующее предложение

$http({ 
    method: 'GET', 
    url: 'someurl', 
    headers: { 
     'Authorization': undefined 
    } 
    } 
) 

так, а не с помощью «ярлык» $ http.get, использование $ http «общий» формат запроса

+0

О, похоже, проблема с этим. hmm –

+0

@ParthTrivedi - что вы пытаетесь сказать? Я не понимаю, извините –

+0

вы правы. Проблема с пропущенным заголовком, который не упоминается в коде OP. –

2

У меня была такая же проблема; Я использовал модуль сателлизации для аутентификации.

Как говорится в разделе часто задаваемых вопросов: «Как избежать отправки заголовка авторизации во всех HTTP-запросах?»

я сделал:

$http({ 
    method: 'GET', 
    url: 'your google api URL', 
    skipAuthorization: true // `Authorization: Bearer <token>` will not be sent on this request. 
}); 

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

-1

Я не могу ответить на угрозы ответ я хочу, но

Может быть, ваш используют перехватчики в приложении AngularJS, поэтому ваш запрос изменен через некоторое время после Сконфигурируйте:

{headers: { Authorization: null } } 

Я делаю больше исследований, чтобы преодолеть это. Я отправлю свои находки позже.

[редактировать] Ср 13 июля 2016 21:38:03 GMT-0500 (CDT) [/ Edit]

Мое решение этой проблемы, собирается с прямой Javascript, таким образом мое заявление не перехватывается перехватчиками из $ http Service и не имеет заголовка авторизации.

Итак, возможно, это поможет кому-то.

Приветствия!

Смежные вопросы