• jQuery异步上传文件


    我想通过jQuery异步上传文件,这是我的HTML:

    1
    2
    3
    <span>File</span>
    <input type="file" id="file" name="file" size="10"/>
    <input id="uploadbutton" type="button" value="Upload"/>

    这是我的javascript:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $(document).ready(function () {
      $("#uploadbutton").click(function () {
        var filename = $("#file").val();
     
        $.ajax({
          type: "POST",
          url: "addFile.do",
          enctype: 'multipart/form-data',
          data: {
            file: filename
          },
          success: function () {
            alert("Data Uploaded: ");
          }
        });
      });
    });

    我只得到上传的文件名,咋办?

    我现在用了 jQuery Form插件来解决这个问题:http://malsup.com/jquery/form/#code-samples

    有没有不用该插件来实现呢?

    解决方法:

    可以采用HTML5,用jQuery,Ajax实现文件上传,不仅如此,你可以做文件验证(名称,大小,MIME类型)或利用HTML5的进度标签(或者div)处理进度事件。

    最近我也在做文件上传,我不想用flash、iframe或其它插件,经过一番研究,我想出了解决方案。

    HTML:

    1
    2
    3
    4
    5
    <form enctype="multipart/form-data">
    <input name="file" type="file" />
    <input type="button" value="Upload" />
    </form>
    <progress></progress>

    首先,你可以做一些验证,例如文件的onChange事件:

    1
    2
    3
    4
    5
    6
    7
    $(':file').change(function(){
        var file = this.files[0];
        name = file.name;
        size = file.size;
        type = file.type;
        //your validation
    });

    按钮点击触发Ajax:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $(':button').click(function(){
        var formData = new FormData($('form')[0]);
        $.ajax({
            url: 'upload.php'//server script to process data
            type: 'POST',
            xhr: function() {  // custom xhr
                myXhr = $.ajaxSettings.xhr();
                if(myXhr.upload){ // check if upload property exists
                    myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
                }
                return myXhr;
            },
            //Ajax事件
            beforeSend: beforeSendHandler,
            success: completeHandler,
            error: errorHandler,
            // Form数据
            data: formData,
            //Options to tell JQuery not to process data or worry about content-type
            cache: false,
            contentType: false,
            processData: false
        });
    });

    处理进度:

    1
    2
    3
    4
    5
    function progressHandlingFunction(e){
        if(e.lengthComputable){
            $('progress').attr({value:e.loaded,max:e.total});
        }
    }

    HTML5的文件上传非常简单,但必须在支持HTML5的浏览器中运行。


    评论列表
    wuchangliang
    var formData = new FormData($('form')[0]);
    请问,在ie上有没有好的方法代替呢?
    s
    ewe
    3268013878@qq.co
    请问为什么我进入了error区间,输出TypeError:Cannot read property 'open' of underfined
    3268013878@qq.co
    请问为什么我进入了error区间,输出TypeError:Cannot read property 'open' of underfined
    12
    fgsdf
    大向
    我想用异步请求实现与数据库的交换,但是用不好,每次都是死循环。请高人指点!
    大向
    我有个建议,不知道好不好。左边的文字颜色容易使人看不太清楚,易花眼。建议换成深颜色的。
    momo
    The current request is not a multipart request 为什么报这个错呢
    仍然有
    热有人要
    你好
    可以上传视频和png格式的图片吗
    你好
    可以上传视频和png格式的图片吗,急等着用。谢谢!
    只能帮到你这里了
    var filename = $("#file").val(); 这个写法本来就得不到文件吧
    文件是$("#file").prop("files")[0]
    aa
      beforeSend: beforeSendHandler,
                success: completeHandler,
                error: errorHandler,

    未定义。怎么改呢
    bjiang
    我最常用的方法是,让form submit到页面中的一个隐藏的iframe中,然后通过页面间通讯的方式来告知原来的主页面已经上传完成.但这个解决不了进度条的问题.
    </div>
    

    发表评论
    切换编辑模式
    </div>
  • 相关阅读:
    HDU-统计难题
    POJ-A Simple Problem with Integers
    HDU-I Hate It
    个人站立会议06
    个人站立会议05
    个人站立会议04
    易校小程序典型用户需求分析
    个人站立会议03
    个人第二次晚间站立总结会议
    个人站立会议02
  • 原文地址:https://www.cnblogs.com/jpfss/p/8963790.html
Copyright © 2020-2023  润新知