zoukankan      html  css  js  c++  java
  • 页面无刷新ajax上传文件模拟iframe,超简单

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

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

    最后只好模拟iframe来实现。发现相当的简单。

    <iframe name="ajaxUpload" style="display:none"></iframe>

    <form name="from1" id="from1" method="post" action="url"  enctype="multipart/form-data" target="ajaxUpload">     这里是重点。要上传文件enctype这个属性不可少,target的值改为iframe的name的值。

    <table>

       <tr>

          <td>附件:</td>

          <td><input type="file" id="document" name="document"/></td>

       </tr>

    </table>

    </form>

    上面是HTML

    下面写一下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& gt;");

           }

         catch

         {

           Response.Write("<script type='text/javascript' type='language'>parent.window.callBackMethod('上传失败');</scrpt& gt;"); //parent.window.methodName();这个是JS调用父页的方法。因为现在模拟一个iframe上传文件,这个iframe的作 用就是一个中间站的作用。在父页点击上传后通过target会将页面文档流传入iframe中再上传服务端作处理。服务端有响应之后然后再在iframe 里面显示出来,而不是直接在父页面显示出结果。这里可能就是一个alert()弹出一个对话框提示一下,如果是这样那么不调父页方法也行。如果想把这提示 的内容丰富一点比如弹出个类似人人网的蓝色的对话框之类的。

         }

    }

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

  • 相关阅读:
    js node 节点 原生遍历 createNodeIterator
    nodejs fs copy本地文件src dst
    axios 请求常用组件,及其错误
    【IntelliJ IDEA学习之三】IntelliJ IDEA常用快捷键
    【IntelliJ IDEA学习之二】IntelliJ IDEA常用配置
    【IntelliJ IDEA学习之一】IntelliJ IDEA安装激活、VM参数
    【python学习案例】python判断自身是否正在运行
    【Linux脚本学习案例】shell脚本多通道并发执行存储过程
    【Activiti学习之四】Activiti API(三)
    【Activiti学习之三】Activiti API(二)
  • 原文地址:https://www.cnblogs.com/jizonghai/p/2853170.html
Copyright © 2011-2022 走看看