`
heikediguo
  • 浏览: 27428 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

javascript “异步”上传文件

阅读更多
var Uploader = (function(){
	/**
	 * @param options
	 * @param callback
	 * @returns
	 * @desc 创建iframe
	 */
	var iframe = function(options) {
		options = options || {
			id : 'iframe' + Math.random(),
			name : 'iframe',
			src : ''
		};
		var iframe;
		try{
			iframe = document.createElement('<iframe name=' + options.name + '>');
		}catch(e) {
			iframe = document.createElement('iframe');
			iframe.name = options.name;
		}
		options.id && (iframe.id = options.id);
		iframe.src = options.src;
		iframe.style.cssText = options.cssText;
		return iframe;
	};
	/**
	 * @param {file}
	 * @return {}
	 * @desc 上传文件
	 */
	function Uploader(file){
		var name,hidden;
		var uuid = Uploader.uuid++;
		this.state = 0;
		this.file = file;
		this.form = file.form;
		name = 'upload_file_'+ uuid;
		this.iframe = iframe({
			name:name,
			src:'blank.html',
			cssText:'display:none;'
		});
		document.body.appendChild(this.iframe);
		this.form.target = name;
	};
	Uploader.uuid = 0;
	Uploader.prototype = {
		upload:function(callback){
			//生成JSONP回调
			var ts,jsonp,uploader,action,jsonpCallback;
			ts = (new Date()).getTime();
			jsonp = 'jsonp' + ts;
			uploader = this;
			window[jsonp] = function(ret){
				callback(ret);
				uploader.state = 0;
			};
			action = this.form.action;
			jsonpCallback = 'parent.' + jsonp; 
			if(action.indexOf('callback') > -1){
				action = action.replace(/jsonp\d+/,jsonpCallback);
			}else{
				action += (action.indexOf('?') > -1 ? '&callback=' : '?callback=') + jsonpCallback;
			}
			this.form.action = action;
			this.state = 1;//开始上传
			this.form.submit();
			return jsonp;
		},
		readyState:function(){
			return this.state;
		},
		cancel:function(jsonp){
			typeof window[jsonp] && (window[jsonp] = function(){});
		}
	};
	return Uploader;
})();


这种上传文件的方法不会刷新页面,类似于Ajax。原理就是将要提交的表单target属性和页面中隐藏的iframe的name属性相等。实际就是iframe做提交
而iframe本身是不可见的,所以用户不会看到页面刷新的效果,请求成功或者失败服务器端都要返回一个script元素,该元素里面有一个
发送请求时候传递的回调函数callback,请求成功或者失败就会执行callback函数把服务器处理的结果作为回调函数传递到前端。

 

页面调用:

 

var file = document.getElementById('file'),uploader;
uploader = new Uploader(file);
uploader.upload(function(data){
        //成功或失败处理
});
 

 

分享到:
评论

相关推荐

    flash javascript 异步上传文件 --swfupload

    在现代Web应用中,文件上传是一项常见的功能,而“Flash JavaScript异步上传文件——SWFUpload”正是这种功能的一种实现方式。SWFUpload是一个开源的JavaScript库,它结合了Adobe Flash技术,允许用户在不刷新整个...

    java文件异步上传

    `jQuery.uploadify`是一个广泛使用的JavaScript插件,用于实现文件的异步上传。在提供的文件列表中,`uploadify.css`和`jquery.uploadify-3.1.js`(以及其压缩版`jquery.uploadify-3.1.min.js`)是这个插件的核心...

    jsp异步上传文件

    `jsp异步上传文件`这个主题聚焦于如何利用JavaServer Pages (JSP)、Servlet以及JavaScript的ajaxFileupload.js插件来实现在Web应用中异步上传文件。这种方式可以提供更好的用户体验,因为文件上传不会阻塞页面的其他...

    asp.net异步上传小文件

    在ASP.NET中,异步上传小文件是一种提高用户体验的技术,特别是在用户需要上传多个小型文件时。这种方式避免了页面刷新,使得上传过程更加流畅。本文将详细介绍如何实现ASP.NET中的异步文件上传,并讨论相关的前端...

    java实现多文件异步上传

    ### Java实现多文件异步上传知识点详解 在现代Web应用开发中,文件上传是一个非常常见的需求,尤其是在涉及图片、文档等多媒体数据的应用场景下。为了提高用户体验,异步上传技术得到了广泛的应用。本文将深入探讨...

    ajax异步上传文件实现

    标签“ajax”和“异步文件上传”表明,这个主题是关于使用Ajax技术实现实时文件上传,而无需等待整个页面刷新。在实际项目中,你可能还需要考虑错误处理、文件大小限制、多文件上传、以及安全性等问题。 至于提供的...

    ajax异步上传文件

    而AJAX异步上传则不同,它通过JavaScript创建XMLHttpRequest对象,利用这个对象向服务器发送请求,然后在后台处理数据,最后将响应结果回传到客户端,整个过程不会刷新页面,提供更好的用户体验。 jQuery库为开发者...

    JQuery 异步上传文件demo

    在本项目"JQuery异步上传文件demo"中,我们将探讨如何使用jQuery的Ajax功能来实现这一目标。 首先,让我们了解异步上传的基本原理。传统的文件上传通常涉及表单提交,这会导致页面刷新,打断用户操作。而异步上传则...

    SpringMVC+Ajax异步文件上传

    而`Ajax`技术则使得页面可以在不刷新的情况下与服务器进行交互,实现异步上传,极大地提升了用户体验。在本教程中,我们将探讨如何结合`SpringMVC`和`Ajax`来实现异步文件上传,并讨论短视频背景以及`a`标签绑定文件...

    异步提交多文件上传

    在IT领域,多文件异步上传是一项常见的需求,特别是在网页应用和云计算环境中。这个主题涉及到前端、后端以及文件压缩等多个技术层面。以下是对这些知识点的详细解释: 1. **多文件上传**:多文件上传是指用户可以...

    ASP.NET实现异步上传文件Demo

    而异步上传,通常借助JavaScript、AJAX和Web服务技术,使得文件上传过程在后台进行,用户界面可以保持活动状态,提供更流畅的交互体验。 在ASP.NET中,我们通常使用ASP.NET AJAX控件工具包或jQuery库中的FileUpload...

    jquery 异步上传文件

    5. **异步上传实现**: - 创建一个HTML表单,包含一个`&lt;input type="file"&gt;`元素,让用户选择要上传的文件。 - 使用JQuery监听`change`事件,当用户选择文件后触发。 - 使用`FormData`创建一个新的表单数据对象,...

    js异步上传文件插件

    在IT行业中,JavaScript(简称JS)作为前端开发的主要语言,其异步上传文件的功能是现代网页应用中的一个重要组成部分。这个“js异步上传文件插件”涵盖了三种不同的异步上传方式,结合HTML、JS和Ajax技术,为开发者...

    js异步上传文件

    在JavaScript中,异步上传文件是一项常见的需求,特别是在Web应用中,用户可能需要上传图片、文档等资源。这里我们将深入探讨如何使用JavaScript、Ajax、Servlet、Action和JSP来实现这个功能。 首先,我们从...

    uploadify文件异步上传

    Uploadify 是一个流行的JavaScript库,用于实现文件的异步上传功能。它利用Flash技术提供了一种用户友好的界面,使得用户可以选择多个文件并一次性上传,而无需等待每个文件的上传完成。在“uploadify 文件异步上传 ...

    纯JS异步上传文件实例

    在`uploadReplace.js`和`czyx.js`中,可能会有处理异步上传的JavaScript代码,使用XMLHttpRequest或fetch API向服务器发送请求,上传文件数据。 3. **Ajax**:Ajax(异步JavaScript和XML)是创建动态网页的关键技术...

    Ajax异步上传文件

    Ajax异步上传文件技术应运而生,它允许用户在上传文件时保持页面状态,提供无缝的交互体验。SpringMVC作为流行的Java Web框架,支持多种文件上传方式,与Ajax结合可以实现这一功能。 首先,我们需要了解Ajax的核心...

    SWFUpload 异步文件上传

    综上所述,SWFUpload 是一个功能强大的文件上传解决方案,尤其适用于需要在老版本浏览器中实现多文件异步上传的场景。结合其与PHP的兼容性和中文文档的支持,使得它成为开发者们的得力工具。然而,随着HTML5的普及,...

    ajax异步上传文件插件

    **Ajax异步上传文件插件详解** 在现代Web开发中,用户交互的实时性和流畅性是提升用户体验的关键因素之一。Ajax(Asynchronous JavaScript and XML)技术的出现,使得页面无需刷新即可实现数据的异步更新,极大地...

    ajaxfileupload实现异步式上传文件

    AjaxFileUpload是基于jQuery的一个插件,它利用了AJAX技术来实现文件的后台异步上传。AJAX(Asynchronous JavaScript and XML)的核心在于通过JavaScript与XMLHttpRequest对象进行通信,使得前端与后台的数据交换...

Global site tag (gtag.js) - Google Analytics