原型 js:ajax 提交时缺少输入类型文件

Prototype js : input type file is missing on ajax submit

我已经创建了一个不同的自定义表单并想使用原型提交表单 ajax.This 表单包含四个字段

two text field and 
two file field.

但是当我使用原型 js 的 ajax 提交数据时,表单没有通过两个字段和 enctype="multipart/form-data" 但不起作用。 代码:

<form action="bt" method="post" enctype="multipart/form-data" name="new-art-upload" id="new-art-upload">
<input type="text" name="fname" value=""   class="input-text required-entry"/>
<input type="text" name="fname" value="" class="input-text required-entry"  />
<input type="file" name="fileone"  class="required-entry"   />
<input type="file" name="filetwo" class="required-entry"   />
<button type="submit" title="<?php echo $this->__('Save The Art') ?>"  class="button newAdd_Sub" onclick="newartUpload.submit(this)"><span><span><?php echo $this->__('Save Art') ?></button>
</form>

脚本:

<script>
    var newartUpload=new VarienForm('new-art-upload');
    newartUpload.submit=function(button,url){
    if(this.validator.validate) {
        var form=this.form;
        var oldUrl = form.action;
        if (url) {
           form.action = url;
        }
        var e=null;
        try{
          // this.form.submit();
           new Ajax.Request(this.form.action,{
            method:this.form.method,
            parameters:this.form.serialize(),
                    contentType: 'multipart/form-data',

            onSuccess:function(transport){
                var response=transport.responseText.evalJSON(true);

            }.bind(this)
            });


        }catch(e){
        }
        if(e){
            throw e;
        }
    }
    }.bind(newartUpload)
</script>

我猜它可能是内容类型,而且主要是表单中的内容类型/

主要问题是文件输入字段未发送到 ajax 请求

您不能通过 Ajax 使用 Prototype 提交文件,因为 XMLHttpRequest(Ajax 的基础)不适用于多部分表单。有变通方法,例如使用 keyhole iframe 发送普通表单请求,并通过 iframe 使用回调重定向或响应外部页面以显示表单已完成。现代 JS 中的新文件接口(在 Prototype Ajax 接口编写后标准化多年)现在可以通过 JS 提交发送文件数据,但这被积极劝阻(并且只有在极少数情况下才有可能)浏览器,不久前)所以 Prototype 只是从它将序列化的表单元素列表中删除文件输入。