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

    服务器不允许跨域请求:


    服务器关闭跨域限制:


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

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



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

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


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