我的需求是这样的: A和B是两个不同域的服务器,A要调用B的接口将文件上传到B端,B端返回一串JSON,A端要拿到返回值进行处理。
首先,说说Ajax无刷新实现文件上传,网上有很多插件,比较好用的有uploadify(flash),jquery.upload(iframe)等。jquery.upload借助iframe,在iframe里创建表单submit,上传完成后移除iframe,这样只在框架里刷新,表面看起来主页面并没有刷新,这样就完成了无刷新文件上传。
再说跨域,不管是用flash还是用iframe的方式上传都牵扯到一个跨域的安全问题导致上传失败,服务器返回的callback信息无法供主页面使用。网上有人说用domain.name,这种方法我折腾了半天也没调通。有人用flash上传的需要服务器加一个crossdomain.xml文件,还有的非flash方式上传的需要服务器加header(“Access-Contro-Allow-Origin:*”)。后面这两种方法都不安全,而且如果无法获得服务器权限也行不通。
经过多方实验,最终放弃了在终端上传的尝试。
终极解决方案是:用ajax将数据提交到同域,在服务器后端处理上传文件的请求并接收返回数据。这里需要借助PHP的CURL模块。
今天不早了,改天有空再补例子吧。