AjaxUpload异步上传插件

 

 

1、使用

引入 ajax_upload.js

<script type="text/javascript" src="js/ajax_upload/ajax_upload.js"></script>

 

为 form 添加 id 属性

1 <form id="upload_form" action="upload.jsp" method="post" enctype="multipart/form-data">
2     <input id="upload_file" type="file" name="file1" placeholder="请选择文件">
3     <br /><br />
4     <input type="button" value="上传" onclick="upload()">
5 </form>

 

在点击按钮时调用 AjaxUpload 函数,传入 form 的 id 值、回调函数

js 代码

 

 1 function upload() {
 2     if(!document.getElementById("upload_file").value) {
 3         alert("请选择文件。");
 4         return;
 5     }
 6     // 执行异步上传的函数
 7     ajax_upload("upload_form", function(data) {
 8         var json = eval("(" + data + ")");
 9         if(json["error"] == "0") {
10             alert("上传成功。");
11         }
12     });
13 }

 

服务器端返回的信息可以是任何类型,只要自定义的回调函数可以处理即可

 

 

2、原理

如果我们让 form 的 target 属性指向某个隐藏的 iframe,在提交表单时,响应信息会在 iframe 框架进行显示,而“外面”的页面不会刷新,从而达到“无刷新异步”上传的效果

插件函数分为以下几步:

1)随机生成一个字符串,用作 iframe 的 id 和 name 属性值

2)动态创建一个 iframe,设置 id 和 name 属性值,应该是隐藏的

3)根据 id 获取到 form,为它设置 target 属性值

4)提交表单

5)在 iframe 的 onload 函数里面调用回调函数,把响应作为其参数,然后移除 iframe,移除 form 的 target 属性

代码

 

 1 /**
 2  * form_id - 需要提交的form的id
 3  * callback - 回调函数
 4  */
 5 function ajax_upload(form_id, callback) {
 6 
 7     // 首先创建一个iframe
 8     var iframeName = "AjaxFrame_";
 9     for(var i = 0; i < 10; i++)
10         iframeName += Math.floor(Math.random() * 10);
11 
12     iframeName += "_" + (new Date()).getTime();
13     var iframe = document.createElement("iframe");
14 
15     iframe.setAttribute("name", iframeName);
16     iframe.setAttribute("id", iframeName);
17     iframe.setAttribute("width", 1);
18     iframe.setAttribute("height", 1);
19 
20     iframe.style.display = "none";
21 
22     // 获取body
23     var body = document.getElementsByTagName("body")[0];
24 
25     // 把iframe插入到body中
26     body.appendChild(iframe);
27 
28 
29     // 获取form
30     var form = document.getElementById(form_id);
31     // 设置target属性
32     form.setAttribute("target", iframeName);
33     // 提交表单
34     form.submit();
35 
36     // 执行回调函数
37     iframe.onload = function() {
38         var resp = window.frames[ iframeName ].document.body.innerHTML;
39         callback(resp);
40         // 删除iframe
41         body.removeChild(this);
42         // 移除form的target属性
43         form.removeAttribute("target");
44     }
45 }

 

3、示例代码

点击下载

 

ajax_upload.js

 

posted @ 2018-04-13 08:20  用户不存在!  阅读(142)  评论(0)    收藏  举报