前段时间在解决ajax上传文件时折腾了好一阵。直接用$.post上传文本信息肯定是没有问题的。但是$.post直接上传图片是不可行的。

后来看到网上的一些解决方案,有现成的ajax上传文件的封装的方法也有利用flash的。flash确实是个好方法 但是不是每个人都会flash的而且下载下来现成的方法要做修改也不是件易事,且文件相对较大。最后只好模拟iframe来实现。发现相当的简单。

html:

<iframe name="ajaxUpload" style="display:none"></iframe>
<form name="from1" id="from1" method="post" action="url" enctype="multipart/form-data" target="ajaxUpload">
<table>
<tr>
<td>附件:</td>
<td><input type="file" id="document" name="document"/></td>
</tr>
</table>
</form>

这里是重点。要上传文件enctype这个属性不可少,target的值改为iframe的name的值。

下面写一下js代码,我是用的jQuery所以在用的时候载入jquery的库是必不可少的。

$(function(){
if($.browser.msie){
window.form1.submit();}else{
$("#form1").submit();}
});

这里是做了一个浏览器版本的判断,因为IE是不太符合规范的一个浏览器,尤其是IE6。IE6是不直接支持$("#idName").submit();这种方式的。

服务端如下,还得返回一个值,直接submit是无法返回值的

public void Upload()
{
HttpPostedBase ff=Request.Files["document"];//这里是获取上传的文件流,也可以用索引值来表示如果是多个文件的话
string fileName=System.DateTime.Now+ff.FileName.ToString(); //这里取出来的文件名是没有后缀的,所以要保存的话还需要取出文件拓展名。这里就不写过细,只是为描述这样一个思路。
try
{
SaveAs(documentPath+fileName+extendtionName);
Response.Write("<script type='text/javascript' type='language'>parent.window.callBackMethod('上传成功');</scrpt>");
}
catch
{
Response.Write("<script type='text/javascript' type='language'>parent.window.callBackMethod('上传失败');</scrpt>"); //parent.window.methodName();这个是JS调用父页的方法。因为现在模拟一个iframe上传文件,这个iframe的作用就是一个中间站的作用。在父页点击上传后通过target会将页面文档流传入iframe中再上传服务端作处理。服务端有响应之后然后再在iframe里面显示出来,而不是直接在父页面显示出结果。这里可能就是一个alert()弹出一个对话框提示一下,如果是这样那么不调父页方法也行。如果想把这提示的内容丰富一点比如弹出个类似人人网的蓝色的对话框之类的。
}
}

模拟iframe其实是页面局部更新,但是页面中的这个iframe没有内容而且还是不显示的,所以它刷新了完全不会影响到整个页面。

最新文章

  1. Yii源码阅读笔记(三十)
  2. Redis主从复制深入剖析
  3. android WebView网页浏览器
  4. asp.net mvc中在使用async的时候HttpContext为null的问题
  5. jdbc实现简单的增删改查
  6. 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解
  7. jquery的hover mouseover mouseout mouseenter mouseleave的区别
  8. [转]How Can I Find Out What Is Using a Busy or Reserved Serial Port?
  9. 读者写者问题(有bug 后续更改)
  10. CentOS设置服务开机启动的方法
  11. 常见的排序算法之Java代码解释
  12. ZOJ3469 Food Delivery 区间DP
  13. css揭秘之linear-gradient
  14. How to hide TabPage from TabControl
  15. Spring MVC中各个filter的用法
  16. JavaWeb笔记一、Servlet 详解
  17. BAT有增有减&amp;nbsp;互联网2015校园…
  18. IdentityServer4 中文文档 -16- (快速入门)使用 EntityFramework Core 存储配置数据
  19. Java中单例实现
  20. 怎么让self.view的Y从navigationBar下面开始计算

热门文章

  1. 如何在RedHat 7.0系统中安装mysql 5.7.22
  2. Intellij IDEA 像eclipse那样给maven添加依赖,且Intellij idea里在pom.xml里添加Maven依赖,本地仓库下拉列表显示包很少的血的经验
  3. Python学习之三级菜单
  4. scrapy--BeautifulSoup
  5. python--re(匹配字符串)
  6. python——获取数据类型
  7. python-5模块
  8. CONDENSE命令により、文字列から冗長スペースが削除
  9. 不想停机?快使用Windows Server 2016滚动升级
  10. 剑指Offer - 九度1391 - 顺时针打印矩阵