在ajax上的html表单enctype

cha*_*lie 5 html ajax jquery

我有这个提交我的表单数据的jquery代码:

<script type="text/javascript">
$(document).ready(function(){
$("#message").hide();
$("#please_wait_box").hide();
$("#viewreseller").submit(function(e){
    e.preventDefault();
    dataString=$("#viewreseller").serialize();
    $.ajax({
        type: "POST",
        url: "view_reseller-go.php",
        cache: false,
        data: dataString,
        success: function(res){
            //$("#message").show();
            $("#please_wait_box").hide();
            $("#message").html(res);
            $('#message').fadeIn('slow');
            if(res.indexOf("success")!=-1)
            {
                window.location.href = res.substr(8);
            }
        }
    });
});
});
</script>
Run Code Online (Sandbox Code Playgroud)

我需要在表单上设置enctypemultipart/form-data - 这是否可以使用我的上述代码?

Que*_*tin 5

由于您使用 Ajax 提交表单数据,因此设置enctype不会产生任何效果。您完全绕过了使用它的表单提交过程。

因此,让我们问一下您是否可以调整该代码以达到与设置enctype. 该属性对表单提交有三个影响。

  1. 它设置 HTTP post 请求的内容类型。您可以轻松做到这一点。headers: { "Content-Type": "multipart/form-data" }
  2. multipart/form-data它以代替application/x-www-form-urlencoded"-的形式对数据进行编码,serialize永远不会这样做
  3. 它将包含来自文件输入的文件 -serialize永远不会这样做

jQuery 没有内置任何内容来处理通过 Ajax 上传的文件。MDN 对使用内置浏览器 API 的过程有相当详细的描述(请注意,您需要一个现代浏览器来支持其中一些 API)。

由于您使用的是 jQuery,因此您可能应该考虑使用支持 Ajax 文件上传的预先编写的库。有很多可用的,但我无法推荐特定的一个。