cleey
望着那一丝海线,若隐若现。落日下的海霞,数不尽的美,看不完的醉
ajax上传文件,网页无刷新
ajax与后台通信都是通过传递字符串来实现了,而且处于安全考虑,js是不能操作文件。这里可以得出一个结论,ajax是不能实现文件上传的。

但是为什么还是说的使用ajax来上传文件,这里有个小方法,使用iframe,我们创建一个hidden的iframe刷新其实是刷新hiddeniframe,但是我们页面可见的所有信息,是不刷新的,所以没有页面跳转的痕迹,感觉像ajax提交 -- 其实是iframe

只需要两步搞定:

1、前端;

2、后台;

这里我们使用PHP举例一个:
1、前端,创建一个index.html



<form action="upload_file.php" method="post" enctype="multipart/form-data" target="hidden_frame">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
<iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
</form>
<script type="text/javascript">
function callback(code,info){
console.log(code+info);
}
</script>



2、后端,创建一个upload_file.php



        $url = "/uploads/";  // 存储路径
$size = 2000000; // 文件大小
$allowedExts = array("gif", "jpeg", "jpg", "png","csv"); // 可上传的后缀名
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ( ($_FILES["file"]["size"] < $size) && in_array($extension, $allowedExts) ){
if ($_FILES["file"]["error"] > 0){
$return =array('code'=> '1','info'=> "Return Code: " . $_FILES["file"]["error"]);
}
else{
$newfile_url = $url.Date('YmdHis').'_'.$_FILES["file"]["name"];
move_uploaded_file($_FILES["file"]["tmp_name"],$newfile_url);
$return =array('code'=> '1','info'=> "Stored in: " . $newfile_url);
}
}
else{
$return =array('code'=> '0','info'=> 'Invalid File');
}
echo "<script>parent.callback('".$return['code']."','".$return['info']."')</script>";



好的我们来一一解析,这里我们看到前端提交是使用了

 target="hidden_frame"
这个主要是指定hidden_frame对象来提交操作,避免页面刷新;



后台最后输出一个js脚本:

echo "<script>parent.callback('".$return['code']."','".$return['info']."')</script>";
这个主要是反馈回去调前端的一个callback函数:
<script type="text/javascript">
function callback(code,info){
console.log(code+info);
}
</script>


这样你可以再callback的函数里面写任何东西了,后台也可以传任何东西到前端来。
大功告成~~
<< 上一篇 Linux的内存说明 文件上传样式修改 下一篇 >>
文章标签
随意 | Created At 2014 By William Clinton | 蜀ICP备14002619号-4 |