V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
zhihaofans

jquery ajax 怎样跨域获取 json 数据

  •  
  •   zhihaofans · Jul 13, 2016 via Android · 5431 views
    This topic created in 3575 days ago, the information mentioned may be changed or developed.
    21 replies    2016-07-14 17:58:05 +08:00
    zhihaofans
        1
    zhihaofans  
    OP
       Jul 13, 2016 via Android
    试了网上的很多方法都不行,都提示不允许跨域
    explon
        2
    explon  
       Jul 13, 2016
    搜索 JSONP
    ousterljn
        3
    ousterljn  
       Jul 13, 2016
    zhihaofans
        4
    zhihaofans  
    OP
       Jul 13, 2016 via Android
    @explon jsonp 之前试了几次要么还是那样要么返回空白数据,不知道是不是参数错误
    LancerComet
        5
    LancerComet  
       Jul 13, 2016   ❤️ 2
    1. Ajax 默认支持浏览器发起跨域请求( XHR Level 2 标准,可参考 http://www.ruanyifeng.com/blog/2012/09/xmlhttprequest_level_2.html ),只要服务器打开跨域权限就可以直接请求。

    服务器不允许跨域请求:


    服务器关闭跨域限制:


    2. JSONP.
    binux
        6
    binux  
       Jul 13, 2016
    需要对方支持
    0915240
        7
    0915240  
       Jul 13, 2016
    @LancerComet bingo! 服务端开启或者 jsonp
    iyaozhen
        8
    iyaozhen  
       Jul 13, 2016 via Android
    @LancerComet 其实就是要对方服务器支持。

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



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

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


    @huntererer
    谢谢,我看一下
    zhihaofans
        12
    zhihaofans  
    OP
       Jul 13, 2016
    试了一下几个网址,发现好像我调用的这个 api 不知道为什么就是失败,其他的几个都可以,用浏览器打开 api 地址就可以返回数据
    zxwind
        13
    zxwind  
       Jul 14, 2016
    caixiexin
        14
    caixiexin  
       Jul 14, 2016 via Android
    如果对方服务端你不能改的话,只能通过自己的服务端做一层转发咯
    wzxjohn
        15
    wzxjohn  
       Jul 14, 2016 via iPhone
    @zhihaofans 用浏览器打开 API 地址完全不会导致跨域!这个测试对解决你的问题没有意义的。。。
    kiwi95
        16
    kiwi95  
       Jul 14, 2016 via Android
    如果能修改服务器那开 cors 是最方便的,如果不能就只能在自己的服务器 curl 代理一层
    qinxi
        17
    qinxi  
       Jul 14, 2016
    nginx 反向代理
    Aaron99
        18
    Aaron99  
       Jul 14, 2016 via Android
    jsonp
    zhihaofans
        19
    zhihaofans  
    OP
       Jul 14, 2016
    @wzxjohn
    我的意思是 跨域是成功了,但不知道为什么只有我用这个 API 时不返回数据,其他网址的都没问题
    finalspeed
        20
    finalspeed  
       Jul 14, 2016
    @Aaron99 第三方 API 不支持,然并卵....
    flydogs
        21
    flydogs  
       Jul 14, 2016
    jsonp
    服务器端和客户端都要修改。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3560 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 00:19 · PVG 08:19 · LAX 17:19 · JFK 20:19
    ♥ Do have faith in what you're doing.