最近在弄一个上传功能,上级要求使用异步;找了一下工具,好几种,html5uploader、plupload、webupload等,这边选用了第一张,因为找到了一个带进度条的例子,直接拿来用,测试了几次搞懂怎么配置后把功能完成了;谁知上级说要把文件传到其他服务器,这个不能跨域,换一个工具;推荐我用plupload,但看了并没有区别,这跨域是浏览器的问题啊,感觉应该跟工具关系不大,这边就查了很多解决跨域问题的办法,试了都不行,frameset又觉得太麻烦了;后来找到了一篇介绍跨域原因的文章:点击打开链接,看完之后试了一下服务端代码里加上运行跨域的代码;
header("Access-Control-Allow-Origin: 请求的地址");
//判断请求,options是浏览器的跨域运行判断请求,只发送header
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header("Access-Control-Allow-Methods: POST,GET,PUT");
header("Access-Control-Allow-Headers: ".$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']);
exit; //结束,只需要返回头部即可
}
如上设置,但浏览器判断出是跨越会发一个OPTIONS的请求,服务端判断了之后返回允许的信息,这样浏览器就会把完整的请求信息发送到服务端,这样就可以完成请求了;设置了之后,再试一下跨域请求发现确实好了,而且会有两个请求,会多了一个OPTIONS请求可以查看到