如何使用js跳过跨域请求web api的限制?

发布于 2022-09-01 06:59:16 字数 411 浏览 8 评论 0

我在网上看到说这个跨域问题的解决方法:
1、用jsp或者php,反正是让服务端去访问这个api
2、把这个URL放到一个script标签里加载。
难道就没有用js的ajax直接获取json数据的方法吗?

=====================

好吧,百度的Geocoding还是用第二种方法吧,跨域这个看来是解决不了了。
我还想问问,别的url api,比如天气的那个http://apistore.baidu.com/astore/serviceinfo/1798.html?qq-pf-to=pcqq.discussion这个怎么用上面第二种方法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

汹涌人海 2022-09-08 06:59:16

1 的实质是代理,2 的实质是 JSONP,原理是:http://segmentfault.com/q/1010000002707387/a-1020000002707744

正常情况下要去除跨域限制只要设置 API 的 response header 的 Access-Control-Allow-Origin(https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)就好了,然而显然目前你没办法操控 API 的代码。但是又因为你给的这个接口不是 JSONP 接口,所以只能通过代理。控制台运行下面的代码试试:

var s = document.createElement("script");
s.src = "https://jsonp.afeld.me/?callback=hello&url=http%3A%2F%2Fapistore.baidu.com%2Fmicroservice%2Fweather%3Fcitypinyin%3Dbeijing";
document.body.appendChild(s);

function hello(data) {
    alert( data.retData.weather );
}
情感失落者 2022-09-08 06:59:16

很遗憾,本来 HTTP 协议支持一种叫 CORS 的访问控制功能,并且在 IE8*及其他现代浏览器上支持的很好。但是百度的 Geocoding API 服务并没有使用该功能。
所以答案是:没有。

温馨耳语 2022-09-08 06:59:16

2-非 jsonp 接口,Refused to load the script...,还是服务器端做代理吧。
图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文