首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Google Place API -请求的资源上不存在'Access-Control-Allow-Origin‘标头。因此不允许访问源'null‘

Google Place API -请求的资源上不存在'Access-Control-Allow-Origin‘标头。因此不允许访问源'null‘
EN

Stack Overflow用户
提问于 2015-02-06 14:21:44
回答 8查看 107K关注 0票数 51

我正在使用Google Place API。

我想得到什么建议的地方打字帮助。

所以,我所做的是-

代码语言:javascript
复制
var Google_Places_API_KEY = "AIzaSyAK08OEC-B2kSyWfSdeCzdIkVnT44bcBwM";      //Get it from - https://code.google.com/apis/console/?noredirect#project:647731786600:access
var language = "en";        //'en' for English, 'nl' for Nederland's Language


var Auto_Complete_Link = "https://maps.googleapis.com/maps/api/place/autocomplete/json?key="+Google_Places_API_KEY+"&types=geocode&language="+language+"&input=Khu";
$.getJSON(Auto_Complete_Link , function(result)
{
    $.each(result, function(i, field)
    {
        //$("div").append(field + " ");
        //alert(i + "=="+ field);
        console.error(i + "=="+ field);
    });
});

所以我请求的链接是-

https://maps.googleapis.com/maps/api/place/autocomplete/json?key=AIzaSyAK08OEC-B2kSyWfSdeCzdIkVnT44bcBwM&types=geocode&language=en&input=Khu

如果我用浏览器转到这个链接,我可以得到类似它的输出(请尝试点击)-

但是如果我尝试使用jQuery的.getJSON.ajax,我的请求将被阻止,并显示以下消息:

所以XMLHTTPRequest被屏蔽了,因为-

否请求的资源上存在'Access-Control-Allow-Origin‘标头。因此不允许访问源'null‘。

我已经为这个问题的解决方案签入了StackOverflow,并通过herehere进行了检查,但无法完美地获得我的解决方案。

有没有人能开导我?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-02-06 14:45:29

AJAX请求只有在发送方和接收方的端口、协议和域相等时才有可能,否则可能会导致CORS。CORS代表跨域资源共享,必须在服务端支持。

解决方案

JSONP

JSONP或“带填充的JSON”是在web浏览器中运行的JavaScript程序中使用的一种通信技术,用于从不同域中的服务器请求数据,由于同源策略,这是典型web浏览器所禁止的。

像这样的东西可能会帮助你交配..:)

代码语言:javascript
复制
$.ajax({
            url: Auto_Complete_Link, 
            type: "GET",   
            dataType: 'jsonp',
            cache: false,
            success: function(response){                          
                alert(response);                   
            }           
        });    
票数 10
EN

Stack Overflow用户

发布于 2018-02-24 23:58:01

在@sideshowbarker这里找到答案后,我让它工作了:

No 'Access-Control-Allow-Origin' header is present on the requested resource—when trying to get data from a REST API

然后使用这种方法让它工作:

代码语言:javascript
复制
const proxyurl = "https://cors-anywhere.herokuapp.com/";
const url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${latitude},${longitude}&radius=500&key=[API KEY]"; // site that doesn’t send Access-Control-*
fetch(proxyurl + url) // https://cors-anywhere.herokuapp.com/https://example.com
.then(response => response.json())
.then(contents => console.log(contents))
.catch(() => console.log("Can’t access " + url + " response. Blocked by browser?"))

更多信息可以在上面链接中的答案中找到。

票数 21
EN

Stack Overflow用户

发布于 2017-04-10 20:27:45

Google提供了API客户端库:

代码语言:javascript
复制
<script src="https://apis.google.com/js/api.js" type="text/javascript"></script>

它可以在给定API路径和参数的情况下为您执行google API请求:

代码语言:javascript
复制
var restRequest = gapi.client.request({
  'path': 'https://people.googleapis.com/v1/people/me/connections',
  'params': {'sortOrder': 'LAST_NAME_ASCENDING'}
});

由于库是从google域提供服务的,因此它可以安全地调用google API,而不会出现CORS问题。

Google docs on how to use CORS.

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28359730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档