【问题标题】:html form enctype on ajaxajax上的html表单enctype
【发布时间】:2013-09-18 09:50:59
【问题描述】:

我有这个提交表单数据的 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>

我需要将表单上的 enctype 设置为multipart/form-data - 我上面的代码可以做到这一点吗?

【问题讨论】:

  • 可能通过这样做:: $("#your_frm_id").attr("enctype", "multipart/form-data");但是你为什么要这样做..你能详细说明一下

标签: jquery html ajax


【解决方案1】:

由于您使用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 has a pretty detailed description of the process for using built in browser APIs(请注意,您需要现代浏览器来支持其中一些 API)。

由于您使用的是 jQuery,您可能应该考虑使用支持 Ajax 文件上传的预先编写的库。有plenty of them available,但我不能推荐一个具体的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-05
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多