无刷新上传图片(文件)技术浅谈

2017-04-25  本文已影响0人  丁香石竹

1,异步上传文件的技术有好多种方式,如:ajaxfileupload插件,swfupload插件,html5等方式,但是本文介绍一种通过iframe方式的上传技术。

2,主要注意的地方是:顶级域相同的情况下,js跨域获取数据(window.domain='XXX.com');target属性的使用。具体如下:

(1)在父页面(所见到的上传页面)引入iframe(实际上传的东东是在此iframe页面),并显示出点击上传图片的标签(实际是点击iframe中的上传图片按钮,此处是用css样式覆盖的原因,用户实际点击的是子页面的上传按钮),具体代码如下:

<script src="http://XXX.jquery.js" language="javascript"></script>

<style>

.db{ display:block; }

.dib {

display: inline-block;

}

.cp {

cursor: pointer;

}

.pa {

position: absolute;

}

</style>

<script>

document.domain='XXX.com';

</script>

<iframe width="80" height="24" frameborder="0" scrolling="no" allowtransparency="true" id="uploadpic" name="upload" src="http://2.XXX.com/iframe.html?dddd" class="db pa" style="left:0px; top:0px; z-index:5"></iframe>

<span class='AddPicBtn'>添加图片</span>

<script>

function Rluploading(){

jQuery('#uploadpic').next().html('上传中...');

}

function addImg(value){

jQuery('#uploadpic').next('.AddPicBtn').html('添加图片');

jQuery('#addImg').attr('src',value);

}

</script>

<br /><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>

<img id='addImg'>

(2)在iframe页面需要注意css的地方,在父页面的点击实际点击的是此子页面的上传图片的按钮,同时注意js跨域及target指向一个空的iframe(实际的数据处理在此页面的)。具体代码如下:

<style>

body{margin:0;padding:0; overflow:hidden}

input{position:absolute;width:70px;height:24px;opacity:0;filter:alpha(opacity=0);z-index:2;cursor:pointer; cursor:pointer;}

.cpDv{ position:absolute;width:70px;height:24px;}

.cp{ cursor:pointer;}

</style>

<body>

<iframe src="" frameborder="0" style="display:none;" name="uploadtarget"></iframe>

<form action="http://2.XXX.com/upload.php?from=club&isdc=1?dddaw8874" name="uploadform" class="cp" method="post" id="uploadform" target="uploadtarget" enctype="multipart/form-data">

<input type="file" name="Filedata" id="file" value=""/>

<input type="hidden" name="type" value="img" />

<div class="cp cpDv"></div>

</form>

<script>

document.domain='XXX.com';

var fileEle = document.getElementById('file'),

formEle = document.getElementById('uploadform'),

type = 'gif|jpg|jpeg';

fileEle.onchange = function(){

var value = this.value;

if(type.indexOf(value.slice(value.lastIndexOf('.') + 1)) === -1){

alert('只允许上传gif, jpg, jpeg文件');

return;

}

//parent.Rluploading();

formEle.submit();

}

</script>

</body>


(3)在服务器端的程序中,需要注意的地方是:如果需要把上传的图片在当前页面显示,就需要获取具体图片的url,同时要把图片的url传给顶级父页面。具体代码如下:

document.domain='XXX.com';window.top.addImg('http://2.XXX.com/uploads/".$_FILES['Filedata']['name']."');";?>

一定要注意echo出的那段js代码,首选是解决跨域,再个就是顶级父页面获取值,也可以把window.top改为parent.parent.

上一篇 下一篇

猜你喜欢

热点阅读