跨域上传文件

来源:互联网 发布:长整型数java 编辑:程序博客网 时间:2024/04/28 03:06

跨域上传文件

不跨域时:

我们需要上传文件但是上传文件后希望页面不要跳转,不涉及到跨域的上传文件有两种:
1),html代码

<form id="submit_file" class="upload_form" action="你要提交的地址" method="post" enctype="multipart/form-data" target="upload_iframe">    <input type="file" name="pic" value="" id="fileupload" style="display:block"> </form> <iframe src="javascript:void((function(){document.open();document.domain='lenovo.com.cn';document.close()})())" frameborder="0" id="upload_iframe" name="upload_iframe"></iframe> 

js代码:运用jqueryform的ajaxSubmit方法直接提交,详情可以查看jqueryformapi;
2):利用form表单提交,然后通过设置target=ifrmae的name属性,设置提交成功后跳转iframe上,然后我们从iframe里获取所有内容。跨域上传也将基于这种原理进行操作。
html代码:

<form id="submit_file" class="upload_form" action="你要提交的地址" method="post" enctype="multipart/form-data" target="upload_iframe"><!--upload_iframe指向下面的ifrmae-->    <input type="file" name="pic" value="" id="fileupload" style="display:block"> </form> <iframe src="" frameborder="0" id="upload_iframe" name="upload_iframe"></iframe> 

js代码:从iframe获取form提交后的返回值就是我们想要的数据了

var text =document.getElementById("upload_iframe").contentWindow.document.body.innerText;//取得返回值

跨域时

运用上边第二种方式,把返回值返回到iframe上,只是取值时会发生跨域的问提。现在就是要解决这种问题。
如果是ie10及其以上的话,直接在提交的后台处理,Access-Control-Allow-Origin处理成当前域名可访问,然后就可以轻松运用第二种方式处理了。

如果是ie9及其以下,
1)在js里设置 document.domain = “基础域名”;
2)后台给的返回值里加上下边一段(js代码不存在跨域说法)

<script type="text/javascript">document.domain = "基础域名";</script>

需要的返回的参数放到一个div里,用第二种方法获取值

注意:(1)在有些浏览器里即使这么做还会报跨域的错误,这时我们需要在iframe的src里提前设置基础域相同。

<iframe src="javascript:void((function(){document.open();document.domain=基础域名';document.close()})())"  frameborder="0" id="upload_iframe" name="upload_iframe"></iframe> 

(2)注意在获取ifrme里值的时候,会遇到不知道什么时候会上传完成返回值到iframe里,这时候我们需要用setInterval实时监控iframe里的值,等到iframe里有值时在取值

0 0