V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
misaka14
V2EX  ›  JavaScript

js 跨域该如何解决

  •  2
     
  •   misaka14 · 2015-06-11 11:34:48 +08:00 · 3928 次点击
    这是一个创建于 3457 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前用node.js和websocket 做了一个聊天服务器,客户端是运行在 jsp 中的。

    重点来了:产品经理要求我聊天功能加入发送图片的功能,这时候问题来了,$.getJSON只是get请求,上传图片get请求满足不了。

    请各位支个招,第一次发贴,谢谢大家。

    14 条回复    2015-07-12 20:44:23 +08:00
    rekey
        1
    rekey  
       2015-06-11 11:37:57 +08:00
    呃,你确定一下是跨域问题还是 get or post 问题。
    zkd8907
        2
    zkd8907  
       2015-06-11 11:37:58 +08:00
    上传图片构造iframe表单,后台返回的结果加callback参数进行回调 =。=
    wy315700
        3
    wy315700  
       2015-06-11 11:38:35 +08:00
    你应该弄一个跨域认证
    kingwrcy
        4
    kingwrcy  
       2015-06-11 11:41:02 +08:00
    1.jsonp
    2.Access-Control-Allow-Origin:*

    你要post的,那就是方案2了
    misaka14
        5
    misaka14  
    OP
       2015-06-11 11:41:44 +08:00
    是跨域问题,因为node.js是跑在其他服务器,上传图片的接口也是在node.js中的。而jsp是运行在自己本地的。
    misaka14
        6
    misaka14  
    OP
       2015-06-11 11:41:53 +08:00
    @rekey 是跨域问题,因为node.js是跑在其他服务器,上传图片的接口也是在node.js中的。而jsp是运行在自己本地的。
    rekey
        7
    rekey  
       2015-06-11 11:46:18 +08:00
    看情况定,如果IE9以上啥的,cors 吧。很好的。
    zomco
        8
    zomco  
       2015-06-11 11:46:30 +08:00 via iPhone
    有一种东西,叫cors
    misaka14
        9
    misaka14  
    OP
       2015-06-11 11:52:22 +08:00
    @rekey 我测试过一个,貌似有时是不管用的。cors是不是只能用 外网IP 的接口吧。如果我自己本地测试,是内网的IP,貌似测试不了的。
    只能用IE9以上?那完了,我们公司最低IE8
    tajpure
        10
    tajpure  
       2015-06-11 11:57:10 +08:00
    最近刚解决ajax图片传输跨域的问题,http://www.slideshare.net/SlexAxton/breaking-the-cross-domain-barrier,这里面讲了几种跨域的解决方案。我采用的是CORS,在服务端的response里加入如下包头:
    '''
    response.setHeader("Access-Control-Allow-Origin", "你的域名(在测试的时候你可以使用 * )");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
    '''
    yeyeye
        11
    yeyeye  
       2015-06-12 08:31:48 +08:00
    我说说理论上可行的方案,啥浏览器都兼容。只要支持iframe和script

    首先构建一个表单,上传文件的表单,加入一个字段为随机字符,把这个表单post到iframe里,服务器收到文件,在数据库中记录随机字符和图片的地址。

    然后每几秒向图片服务器用jsonp的方式带着那个随机字符查看服务器里是否有这个相关的图片 有的话得到http地址 如果iframe的onload属性可以的话 也可以onload之后再请求

    完 简单有效
    misaka14
        12
    misaka14  
    OP
       2015-06-12 09:04:49 +08:00
    @tajpure 兄弟感谢,这个方法我火狐、谷歌和IE高版本都测试成功了
    misaka14
        13
    misaka14  
    OP
       2015-06-12 09:05:02 +08:00
    @kingwrcy 方案2测试成功,感谢
    mingyun
        14
    mingyun  
       2015-07-12 20:44:23 +08:00
    cors只能在高级浏览器了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1384 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:35 · PVG 01:35 · LAX 09:35 · JFK 12:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.