如何解决 Google API 中的 CORS 问题?

Posted

技术标签:

【中文标题】如何解决 Google API 中的 CORS 问题?【英文标题】:How to get around the CORS issue in Google's API? 【发布时间】:2015-10-02 23:37:41 【问题描述】:

我正在开发一个应用程序,我必须使用 Google 的高程 API 获取某些点的高程,但我陷入了臭名昭著的 CORS 问题。

var elevationUrl = 'https://maps.googleapis.com/maps/api/elevation/json?locations=39.7391536,-104.9847034&key=AIzaSyAgXFgUVR4Nia7pegX_0hcz0aNevCKAa58';

$.ajax(
    url: elevationUrl,
    type: 'GET',
    // dataType: 'JSONP',
    success: function()
    
);

对于初学者,我只是尝试查询一个固定点。执行此操作时,我会在浏览器的控制台中收到 CORS 警报。

当我尝试dataType: 'JSONP' 时,它可以工作,并且我从 API 获得响应,但我的浏览器抱怨响应中有错误,而它没有。基本上我试图将 JSON 解析为 JSONP,这就是为什么我在响应中收到语法错误。

解决这个问题的方法是什么?如何通过 AJAX 调用查询 Elevation API?

【问题讨论】:

“我的浏览器抱怨响应中有错误”——确切地说,它抱怨什么?引用错误信息,不要笼统地描述它。 Read the documentation 顶部有一个巨大的框,指向为客户端 JS 设计的 API 版本。 请参考我对 CORS 问题的回答:How to bypass CORS issue ? 【参考方案1】:

我使用 chrome 的 Allow-Control-Allow-Origin 插件来解决这种问题。它将允许您在 chrome 中启用/禁用 CORS。 https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en

【讨论】:

【参考方案2】:
https://medium.com/@akhouri/cors-issues-and-resolutions-803e6abda52a

OR

Make data type to jsonp

$('#btnAll').click(function ()   
$.ajax(  
   type: 'Get',  
   url: 'http://localhost:60545/api/student',  
   dataType: 'jsonp',  
success: function myfunction(data)   
   $.each(data, function myfunction(index, val)   
      $('#ulStudents').append('<li>' + val.FirstName + '' + val.LastName + '</li>');  
   );  

【讨论】:

【参考方案3】:

如果您的站点有后端 api,您可以创建简单的端点以传递到 google api 并在服务器上执行 google 结果,其中 CORS 标头无关紧要。 让您受益于拥有更好的缓存系统。

【讨论】:

我不确定 6 年前我在做什么,但是,是的,我自己后端的代理 API 似乎是解决这个问题以避免 CORS 问题的好方法! B)

以上是关于如何解决 Google API 中的 CORS 问题?的主要内容,如果未能解决你的问题,请参考以下文章