V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Conte
V2EX  ›  问与答

jsonp 怎么实现跨域同步?

  •  
  •   Conte · 2014-08-07 11:48:35 +08:00 · 7087 次点击
    这是一个创建于 3792 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在通过jsonp到其他系统接口获取到数据,要根据得到的数据进行下一步操作,并且操作不能够在返回成功的方法success中进行,而jsonp又没有同步,该怎么解决啊。
    15 条回复    2014-08-07 23:01:32 +08:00
    allenm
        1
    allenm  
       2014-08-07 11:50:36 +08:00   ❤️ 1
    JSONP 实现不了。不支持低端浏览器的话,可以使用 XHR + Access-Control-Allow-Origin 来解决。
    lyragosa
        2
    lyragosa  
       2014-08-07 11:54:54 +08:00   ❤️ 1
    jsonp的本质是将一些代码 append到当前页,之后用<script></script>包裹起来。

    所以他天生跨域,但缺点就是……他本质是就是将一段js放进来执行而已……

    Access-Control-Allow-Origin 可以解决问题,但可能引发安全隐患,请自行斟酌。
    jsonline
        3
    jsonline  
       2014-08-07 12:54:43 +08:00
    回调啊
    jsonp 返回
    window.onFooSuccess({/* your data */})
    jsonline
        4
    jsonline  
       2014-08-07 12:55:23 +08:00
    为啥要同步?需求是?
    dong3580
        5
    dong3580  
       2014-08-07 12:56:12 +08:00
    @allenm
    @lyragosa
    Access-Control-Allow-Origin貌似得对方网站或者系统设置才行吧。
    @Conte
    这样的话别人也能请求了。建议用后端搞定,
    Conte
        7
    Conte  
    OP
       2014-08-07 14:09:18 +08:00
    @dong3580 嗯 正常情况下是后台走开放系统请求数据就行了,我这走偏门,想直接用跨域从接口来获取...
    Conte
        8
    Conte  
    OP
       2014-08-07 14:10:57 +08:00
    @jsonline 因为后面的操作要使用得到的数据啊 不同步的话数据没有得到就进行下面的操作了啊 你没懂么
    jsonline
        9
    jsonline  
       2014-08-07 14:25:13 +08:00
    @Conte 不一定要同步,可以加一个状态变量
    dingyaguang117
        10
    dingyaguang117  
       2014-08-07 16:30:43 +08:00
    @Cont为啥不能在回调中进行 后续操作?
    jsonline
        11
    jsonline  
       2014-08-07 16:35:32 +08:00
    @dingyaguang117 嗯?你 at 的是谁?
    learnshare
        12
    learnshare  
       2014-08-07 16:36:35 +08:00
    @Conte callback 为啥不行?
    allenm
        13
    allenm  
       2014-08-07 17:25:51 +08:00
    @dong3580 正确使用 Access-Control-Allow-Origin 就没有安全性问题。不要老想着设置成 * 。这些安全性问题都是偷懒造成的。https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
    juicy
        14
    juicy  
       2014-08-07 17:26:53 +08:00
    可以让后端程序去访问所谓的“其他系统接口获取”,然后根据结果来发送前端代码,一定要前端来掺和此事?
    siteshen
        15
    siteshen  
       2014-08-07 23:01:32 +08:00
    @lyragosa Access-Control-Allow-Origin 比jsonp安全啊,毕竟前者还可以限制域。

    可以考虑nginx上配置个proxy直接代理到“其他系统系统”。
    好处是,不需要修改后端代码,只需要预留一个类似/api-proxy之类的路径。
    坏处是,需要配置nginx,架构上会复杂些,开发调试也不太方便。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5777 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:42 · PVG 09:42 · LAX 17:42 · JFK 20:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.