jquery ajax 怎样跨域获取 json 数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
zhihaofans
V2EX    Javascript

jquery ajax 怎样跨域获取 json 数据

  •  
  •   zhihaofans 2016-07-13 21:09:57 +08:00 via Android 5097 次点击
    这是一个创建于 3385 天前的主题,其中的信息可能已经有所发展或是发生改变。
    21 条回复    2016-07-14 17:58:05 +08:00
    zhihaofans
        1
    zhihaofans  
    OP
       2016-07-13 21:10:48 +08:00 via Android
    试了网上的很多方法都不行,都提示不允许跨域
    explon
        2
    explon  
       2016-07-13 21:15:15 +08:00
    搜索 JSONP
    ousterljn
        3
    ousterljn  
       2016-07-13 21:17:16 +08:00
    zhihaofans
        4
    zhihaofans  
    OP
       2016-07-13 21:17:17 +08:00 via Android
    @explon jsonp 之前试了几次要么还是那样要么返回空白数据,不知道是不是参数错误
    LancerComet
        5
    LancerComet  
       2016-07-13 21:27:41 +08:00   2
    1. Ajax 默认支持浏览器发起跨域请求( XHR Level 2 标准,可参考 http://www.ruanyifeng.com/blog/2012/09/xmlhttprequest_level_2.html ),只要服务器打开跨域权限就可以直接请求。

    服务器不允许跨域请求:


    服务器关闭跨域限制:


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

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



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

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


    @huntererer
    谢谢,我看一下
    zhihaofans
        12
    zhihaofans  
    OP
       2016-07-13 22:55:05 +08:00
    试了一下几个网址,发现好像我调用的这个 api 不知道为什么就是失败,其他的几个都可以,用浏览器打开 api 地址就可以返回数据
    zxwind
        13
    zxwind  
       2016-07-14 01:29:59 +08:00
    caixiexin
        14
    caixiexin  
       2016-07-14 07:48:22 +08:00 via Android
    如果对方服务端你不能改的话,只能通过自己的服务端做一层转发咯
    wzxjohn
        15
    wzxjohn  
       2016-07-14 08:37:08 +08:00 via iPhone
    @zhihaofans 用浏览器打开 API 地址完全不会导致跨域!这个测试对解决你的问题没有意义的。。。
    kiwi95
        16
    kiwi95  
       2016-07-14 08:56:19 +08:00 via Android
    如果能修改服务器那开 cors 是最方便的,如果不能就只能在自己的服务器 curl 代理一层
    qinxi
        17
    qinxi  
       2016-07-14 09:57:05 +08:00
    nginx 反向代理
    Aaron99
        18
    Aaron99  
       2016-07-14 10:41:35 +08:00 via Android
    jsonp
    zhihaofans
        19
    zhihaofans  
    OP
       2016-07-14 14:20:04 +08:00
    @wzxjohn
    我的意思是 跨域是成功了,但不知道为什么只有我用这个 API 时不返回数据,其他网址的都没问题
    finalspeed
        20
    finalspeed  
       2016-07-14 14:57:53 +08:00
    @Aaron99 第三方 API 不支持,然并卵....
    flydogs
        21
    flydogs  
       2016-07-14 17:58:05 +08:00
    jsonp
    服务器端和客户端都要修改。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     918 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 22:57 PVG 06:57 LAX 15:57 JFK 18:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86