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、示例代码

浙公网安备 33010602011771号