jquery ajax 怎样跨域获取 json 数据

2016-07-13 21:09:57 +08:00
 zhihaofans
4718 次点击
所在节点    JavaScript
21 条回复
zhihaofans
2016-07-13 21:10:48 +08:00
试了网上的很多方法都不行,都提示不允许跨域
explon
2016-07-13 21:15:15 +08:00
搜索 JSONP
ousterljn
2016-07-13 21:17:16 +08:00
zhihaofans
2016-07-13 21:17:17 +08:00
@explon jsonp 之前试了几次要么还是那样要么返回空白数据,不知道是不是参数错误
LancerComet
2016-07-13 21:27:41 +08:00
1. Ajax 默认支持浏览器发起跨域请求( XHR Level 2 标准,可参考 http://www.ruanyifeng.com/blog/2012/09/xmlhttprequest_level_2.html ),只要服务器打开跨域权限就可以直接请求。

服务器不允许跨域请求:


服务器关闭跨域限制:


2. JSONP.
binux
2016-07-13 21:36:57 +08:00
需要对方支持
0915240
2016-07-13 21:43:56 +08:00
@LancerComet bingo! 服务端开启或者 jsonp
iyaozhen
2016-07-13 21:47:23 +08:00
@LancerComet 其实就是要对方服务器支持。

还有一种方法,自己服务器做中转。
huntererer
2016-07-13 21:48:38 +08:00
DoraJDJ
2016-07-13 21:49:16 +08:00
@iyaozhen 哈哈,我当时想通过 Ajax 抓 B 站用户信息之后就发现不能跨域,结果写出了个 Project Ako 这个项目方便让我做中转。



结果到现在还没真正投入实际环境中。
zhihaofans
2016-07-13 21:55:58 +08:00
@LancerComet
@binux
我是调用一个 API ,所以就没办法服务端开启支持了 T_T

@iyaozhen
服务器中转的话,我一开始是这么做的,用 php ,但是因为我的服务器在日本,但 api 所在服务器却在国内再加上我基本上没怎么优化服务器所以中转就慢了很多,还有一个原因就是我怕服务器调用 api 太多次被封 ip(因为是个小型非盈利网站来的)


@huntererer
谢谢,我看一下
zhihaofans
2016-07-13 22:55:05 +08:00
试了一下几个网址,发现好像我调用的这个 api 不知道为什么就是失败,其他的几个都可以,用浏览器打开 api 地址就可以返回数据
zxwind
2016-07-14 01:29:59 +08:00
caixiexin
2016-07-14 07:48:22 +08:00
如果对方服务端你不能改的话,只能通过自己的服务端做一层转发咯
wzxjohn
2016-07-14 08:37:08 +08:00
@zhihaofans 用浏览器打开 API 地址完全不会导致跨域!这个测试对解决你的问题没有意义的。。。
kiwi95
2016-07-14 08:56:19 +08:00
如果能修改服务器那开 cors 是最方便的,如果不能就只能在自己的服务器 curl 代理一层
qinxi
2016-07-14 09:57:05 +08:00
nginx 反向代理
Aaron99
2016-07-14 10:41:35 +08:00
jsonp
zhihaofans
2016-07-14 14:20:04 +08:00
@wzxjohn
我的意思是 跨域是成功了,但不知道为什么只有我用这个 API 时不返回数据,其他网址的都没问题
finalspeed
2016-07-14 14:57:53 +08:00
@Aaron99 第三方 API 不支持,然并卵....

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/292323

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX