2017-04-17 93 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发送的请求进行此操作。