`

用iframe做伪ajax上传文件

 
阅读更多
由于ajax无法发送带有文件的post请求。因此为了打到ajax效果,需要借助iframe。

<form id="formImg" action="uploadImg"  method="post"  target="hidden_frame" enctype="multipart/form-data">
   <div class="fromtrs">
      <label>[i]*[/i]活动海报:</label>
      <input id="AidImg" class="sstp" type="file" name="AidImg" onchange="uploadImg()"/>	
      <div class="sjjt" style="display:none;" id="imgError">
      <div class="bzsj_left"></div>活动海报不可为空</div>
   </div>
</form> 
<iframe style="display:none" name='hidden_frame' id="hidden_frame"></iframe>
<div class="fromtrs">
   <img id="img" src="" width="80" height="80"/>
</div>

form表单中action正常填写处理文件上传的操作。target填写一个隐藏的iframe。
这样表单提交之后,文件会被上传,但是页面却不会刷新,因为表单提交后被刷新页面为隐藏的iframe,因此用户看到的效果和ajax处理的效果是一样的。

现在看到的效果是和ajax一样了,但是ajax是有返回值的。但是现在我们值刷新了iframe页面,却没有ajax的返回值,不知道操作到底是成功了还是失败了。因此需要在页面中写一个js的callback方法,然后在处理上传操作成功后来调用这个callback方法。

这个例子是php做的文件处理,其他语言同理。
public function uploadImg()	
{
	try{
		if($_FILES["AidImg"]["size"]!=0)
		{
			$uploadPath = MB_ROOT_DIR . "/pic";
			if ($_FILES["AidImg"]["size"] < 1024 * 1024 * 2) {
				if ($_FILES["AidImg"]["error"] > 0) {
					error($_FILES["AidImg"]["error"],"index.php/Campaign/campaignPublish");
				} else {
					$suffix = substr($_FILES["AidImg"]["name"], strrpos($_FILES["AidImg"]["name"], '.') + 1);
					$imgDate=date("YmdHis");
					$name = $imgDate . rand("1000", "9999") . "." . $suffix;
					if (!is_dir($uploadPath)) {
						mkdir($uploadPath);
					}
					if (move_uploaded_file($_FILES["AidImg"]["tmp_name"], $uploadPath . "/" . $name)) {
						$pf = new IBPostFile(UPLOAD_IMAGE_URL,UPLOAD_IMAGE_PORT);
						$pf->setFile("AidImg", $uploadPath . "/" . $name);
						$pf->sendRequest();
							$imgUrl = $pf->getResponse();
					}
				}
			} else {
					echo "<script>parent.callback('图片大小不能超过2M',false)</script>";
				return;
			}
		}
	}
	catch(Exception $e)
	{
		echo "<script>parent.callback('图片上传失败',false)</script>";
		return;
	}
	echo "<script>parent.callback('$imgUrl',true)</script>";
}


echo "<script>parent.callback('图片上传失败',false)</script>";
这句花,调用了iframe的父页面的callback方法。并且将一些信息作为参数传进了callback方法。



function uploadImg()
{
	var names=$("#AidImg").val().split(".");
	if(names[1]!="gif"&&names[1]!="GIF"&&names[1]!="jpg"&&names[1]!="JPG"&&names[1]!="png"&&names[1]!="PNG")
	{
		$("#imgError").html("<div class='bzsj_left'></div>"+"海报必须为gif,jpg,png格式");
		$("#imgError").show();
		return;
	}
	$("#formImg").submit();
}

function callback(message,success)
{
	if(success==false)
	{
		$("#imgError").html("<div class='bzsj_left'></div>"+message);
		$("#imgError").show();
	}
	else{
		$("#imgError").hide();
		var paths=message.split("/");
		$("#img").attr("src",message);
		$("input[name='imgUrl']").val(paths[paths.length-1]);
	}
}


这里是页面的callback方法,接受了上传图片处理后返回的结果。

这样,就用iframe模拟了ajax来上传文件。
2
5
分享到:
评论
2 楼 zhangshune 2011-08-17  
想法不错哦

相关推荐

    ajax文件上传

    服务器端应进行严格的验证和过滤,限制上传文件的大小和类型。 7. **用户体验**:在上传过程中,提供清晰的反馈至关重要,包括进度指示、状态提示和错误信息。可以使用CSS和JavaScript创建视觉效果,让用户知道文件...

    Ajax方式提交带文件上传的表单及隐藏iframe应用

    上传文件"&gt; &lt;span id="msg"&gt;&lt;/span&gt; 支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传 &lt;iframe name='hidden_frame' id="hidden_frame" style='display:none'&gt;&lt;/iframe&gt; ``` 2. **JavaScript处理**:使用...

    一个伪ajax图片上传代码实现示例

    在隐藏的iframe中提交表单是伪Ajax上传的核心技术。通过JavaScript创建一个隐藏的iframe元素,并将表单的action设置为这个iframe的名称,使得表单提交时,实际上是提交到一个在当前页面内嵌的隐藏的iframe中,而不是...

    【ASP.NET编程知识】ASP.NET MVC5实现文件上传与地址变化处理(5).docx

    通过使用 KindEditor 的文件上传组件,可以实现非 Flash 的支持 IE6+的方案的核心都是通过 iframe 方式实现伪 AJax 上传,核心还是通过 html form post 到服务器。 四、自定义 UploadAttribute 在实际项目中,可以...

    JavaScript实现图片伪异步上传过程解析

    在JavaScript中实现图片的伪异步上传是一种模拟Ajax文件上传的方法,因为标准的Ajax技术由于安全原因不支持直接上传文件。这种技术的核心是利用HTML的`&lt;form&gt;`表单和`&lt;iframe&gt;`来实现文件的后台上传,同时保持用户...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    ajax操作-伪ajax(iframe) ajax操作-时机选择 文件上传(3种方式)-1 文件上传-时机选择及预览-2 图片验证码 KindEditor基本使用和文件操作 作业 第25周 今日内容概要 博客系统示例预览 组合搜索组件 JSONP跨域...

    python入门到高级全栈工程师培训 第3期 附课件代码

    04 Form组件上传文件 05 上传相关内容梳理 06 Model操作知识提问 07 Model操作概述 08 Model字段 09 Model连表字段参数详解 10 Model自定义多对多第三张表 11 强插一道面试题 12 Model连表操作梳理 13 多对多自关联 ...

    自学使用HTML和CSS进行网站发布

    - **上传文件**:使用FTP或其它工具上传文件至服务器。 ##### 20. 利用服务器功能(Taking Advantage of the Server) - **动态内容**:使用服务器端脚本如PHP、ASP.NET等生成动态内容。 - **数据库集成**:连接...

    Javascript笔记

    本篇笔记涵盖了JavaScript的基础知识和技术要点,包括语言概念、数据类型、变量作用域、类型转换、内置对象的使用、DOM操作、事件处理、Ajax、Jsonp、Iframe应用以及jQuery框架的基本使用。通过这些知识点的学习,...

    酷睿股票私募网站管理系统 V2010 SP2

    酷睿股票私募网站管理系统,是国内首家采用WAP手机及电脑WEB同步访问的股票私募系统,该系统基于ASP+DIV+CSS+AJAX+XML+MSSQL技术专门为股票私募网站开发的一款CMS网站管理系统,是一个经过完善设计并适用于各种...

    WEB数据交互的艺术

    - **长连接**:长连接能够维持客户端与服务器之间的持续连接,适用于更复杂的实时通信场景,如Web IM、文件上传、语音视频传输和网页游戏等。 - **IE的newActiveXObject("htmlfile")**:一种在Internet Explorer...

Global site tag (gtag.js) - Google Analytics