2017-04-17 118 views
1

我正在嘗試與Google Maps Places自動完成API進行Angular Talk。問題是服務器不允許CORS調用(它不返回Access-Control-Allow-Origin標頭),並且JSONP調用似乎也是徒勞的,因爲它返回純JSON而不是JSONP,導致語法錯誤。Angular CORS/JSONP和Google Maps HTTP API調用

這是我目前服務功能嘗試(_jsonpJsonp對象):

return this._jsonp.request(url, { method: 'GET' }); 

這是行不通的。響應到達,但Angular崩潰,因爲它不是JSONP,但JSON。

這太瘋狂了。如果CORS被禁用並且JSONP調用不起作用,我怎麼能訪問它?

https://maps.googleapis.com/maps/api/place/autocomplete/json?key=ACCESS_KEY&types=(cities)&input=ber 

有沒有辦法將JSON服務器響應轉換爲Observable管道中的JSONP數據對象?

回答

1

支持的方式來調用一個web應用程序的地方自動填充API是using the Places library

<script> 
    function initMap() { 
    var map = new google.maps.Map(document.getElementById('map'), { 
     center: {lat: -33.8688, lng: 151.2195}, 
     zoom: 13 
    }); 
    ... 
    map.controls[google.maps.ControlPosition.TOP_RIGHT].push(card); 
    var autocomplete = new google.maps.places.Autocomplete(input); 
    autocomplete.bindTo('bounds', map); 
    var infowindow = new google.maps.InfoWindow(); 
    var infowindowContent = document.getElementById('infowindow-content'); 
    infowindow.setContent(infowindowContent); 
    var marker = new google.maps.Marker({ 
     map: map, 
     anchorPoint: new google.maps.Point(0, -29) 
    }); 
</script> 
<script 
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places&callback=initMap" 
    async defer></script> 

這樣沒關係的迴應缺乏Access-Control-Allow-Origin頭。

使用地圖Javascript API這樣-由script元件的方式來加載庫,然後使用google.maps.Mapgoogle.maps.*方法-是唯一支持方式。 Google故意不允許通過XHR或Fetch API發送的請求進行此操作。