如何使用AJAX使用enctype =“multipart / form-data”提交表单?

时间:2011-04-14 12:26:44

标签: javascript html ajax

如何使用AJAX提交表单使用enctype =“multipart / form-data”?

2 个答案:

答案 0 :(得分:11)

简短回答:你不是。您无法通过AJAX上传文件。

通常的解决方法是将表单的目标设置为隐藏的iframe并使用普通的非AJAXy POST在那里提交表单,以达到预期的效果:

<form target="hiddenIframe" method="post" enctype="multipart/form-data">
    ...
</form>
<iframe name="hiddenIframe" id="hiddenIframe" style="display: none;" />

使用此技术的jQuery plugin

编辑添加:

XMLHttpRequest level 2增加了对通过AJAX上传文件的支持,其浏览器支持现已发展并且不断增长。这是browser support overview

答案 1 :(得分:-1)

这是一种即使使用IE8及以上版本也适用的方式:

使用malsup的jquery form plugin,它将处理XHR以及IE上传ajax所需的隐藏iframe。

此处的代码段:

<form id="formid" action="" enctype="multipart/form-data" method="POST" accept-charset="utf-8">
.
.
.
</form>

<script type="text/javascript">
        $(document).ready(function()
        {
            var options = { 
                cache:'false',   //IE FIX
                data: $('#formid').serialize(),
                dataType: 'json',
                processData: false,
                contentType: false,
                success: function(data) 
                {
                    //success action
                },
                error: function(XMLHttpRequest, textStatus, errorThrown)
                {
                    //error action
                }
            }; 
            $('#formid').ajaxForm(options); 
        });
</script>