当前位置: 首页 > 面试题库 >

从浏览器中运行的前端JavaScript代码调用Yelp API

毋弘光
2023-03-14
问题内容

非常感谢任何人的帮助。我相对较不熟悉使用Mac OSX和Chrome作为浏览器在React中进行开发。我有一个小型应用程序,尝试使用’isomorphic-
fetch’从Yelp Fusion的API发出异步GET请求,但收到以下错误:

提取API无法加载https://api.yelp.com/v3/businesses/search?
[剩余URL] 对预检请求的响应未通过访问控制检查:在所请求的资源上不存在“ Access-Control-Allow-
Origin”标头。因此,不允许访问源’ http:// localhost:3000
‘。该响应的HTTP状态代码为500。如果不透明响应满足您的需求,请将请求的模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。

我已经进行了很多搜索,以查看已经存在对相同问题的应对措施,但是我对于如何用这种开发环境的相对较新的知识来解决问题感到更加困惑。

附带说明:我已经在Chrome浏览器上安装了Allow-Control-Allow-Origin:*扩展程序,但我收到了相同的错误-
只是对其进行了简短,不太详尽的描述:

提取API无法加载https://api.yelp.com/v3/businesses/search?
[剩余网址] 。飞行前的响应具有无效的HTTP状态代码500

以下是我在代码中调用提取的方式:

var options = (
    method: 'get',
    headers: new Headers({
        'Access-Control-Allow-Origin': '*',
        'Authorization': [my token]
        'Content-Type': 'application/json'
    })
}
return fetch(url, options);

这是由于Yelp Fusion的OAUTH2令牌要求具有标头的语法引起的问题,还是我需要执行与代理相关的操作,还是由于其他原因导致的?
如果与代理相关,则当前我正在运行完全由客户端驱动的应用程序,根本不使用服务器端代码。考虑到我的环境,这仍然可行吗?
任何有关我应该走哪个方向以及澄清我的误解的指导都将不胜感激。

再次感谢您对成长中的开发人员的帮助。


问题答案:

造成此问题的原因是https://api.yelp.com/不支持CORS。

而且,您无法在自己的应用程序代码中解决此问题-无论您尝试什么,都无法更改https://api.yelp.com/不支持CORS 的事实。

显然,虽然Yelp API确实支持JSONP。)。

因此,在前端代码中使用https://api.jquery.com/jquery.getjson/或类似代码将使您可以从前端代码向Yelp
API跨域请求。

Yelp API示例回购的GitHub问题跟踪器中的一个相关问题确认没有CORS:

TL; DR:api.yelp.com不支持CORS

还有另一个相关问题:

正如我在#99中回答的那样,我们没有提供使用客户端js直接向api发出请求所需的CORS标头。

上面引用的两个评论均来自Yelp工程师。

因此,这意味着,您的前端JavaScript代码无法直接向Yelp API端点发出请求并获得常规响应(与JSONP响应相反)。

具体来说,由于来自https://api.yelp.com/v3/businesses/searchAPI端点的Access-Control- Allow-Origin响应不包含响应标头,因此浏览器将不允许您的前端JavaScript代码访问这些响应。

另外,由于您的请求包含Authorization和,并且Content- Type标头包含值application/json,因此您的浏览器会在尝试发送实际请求之前执行CORS预检选项请求GET

在这种情况下,预检是特别失败的。但是,从前端JavaScript代码到该API端点的任何其他请求也会失败,即使它没有触发预检。



 类似资料:
  • 问题内容: 是否仍然可以通过浏览器中的Java小程序在Windows下启动“本机”应用程序?IE在网页上“单击此处以启动notepad.exe”。我为此找到的最新参考文献是2002年。我想知道是否不再支持该模型/概念。 问题答案: 是的,但是必须签署小程序。 签名的小程序将提示用户授予他们权限。一旦指定了applet,它就具有与计算机上运行的任何应用程序相同的权限,包括启动本机应用程序(或链接本机

  • 问题内容: 是否有可用的编程库来解析HTML文档,执行JavaScript,然后允许我浏览DOM?这需要在服务器端而非客户端执行。任何语言都可以,但是首选Java,PHP或Ruby。 问题答案: 在Java中:http : //lobobrowser.org/cobra/java-html- parser.jsp 这是一个可识别Javascript,可识别CSS的HTML解析器 ,它与您的问题有关

  • Mocha在浏览器中运行。每个版本的Mocha都将拥有新版本./mocha.js并./mocha.css在浏览器中使用。 特定于浏览器的方法 以下方法仅在浏览器上下文中起作用: mocha.allowUncaught() :如果被调用,错误处理程序将不会吸收未捕获的错误。 典型的设置可能类似于下面,我们呼吁mocha.setup('bdd')使用BDD加载测试脚本,运行之前的界面onload与mo

  • 问题内容: 我正在尝试编写JavaScript函数以获取当前浏览器的宽度。 我发现了这个: 但是,如果身体的宽度为100%,它就会失败。 还有其他更好的功能或解决方法吗? 问题答案: 更新 我的原始答案写于2009年。尽管它仍然有效,但我想在2017年进行更新。浏览器的行为仍然有所不同。我相信jQuery团队在保持跨浏览器的一致性方面做得很好。但是,没有必要包括整个库。在jQuery源代码中,相关

  • 我正在尝试编写一个非常简单的脚本,从txt文件中获取代理(不需要身份验证),并用它打开浏览器,然后在代理列表中循环此操作一定时间。我知道如何打开一个txt文件并使用它,我的主要问题是让代理工作。我看到过类似的问题,我已经采取了解决方案并尝试了它们,我可以让它们毫无错误地运行,但浏览器打开,没有代理。我确信这是一项非常简单的任务,但我对python非常陌生,还没有让它工作。谢谢 这就是我用过的;没有

  • 问题内容: 如果可以的话,如何在Wicket的JavaScript代码中调用Java代码(例如方法)。 问题答案: 呃 正确的答案应该是ajax回调。您可以手动将js编码为挂钩到wicket js,也可以在java中通过wicket组件设置回调。例如,从AjaxLazyLoadPanel中: 本示例说明如何将回调代码添加到Wicket中的任何组件。在浏览器中触发OnDomReady事件后,加载页面