Javascript FormData未定义-Firefox 3.6.28替代版本

Javascript FormData未定义-Firefox 3.6.28替代版本,javascript,jquery,form-data,Javascript,Jquery,Form Data,我有一项伟大的工作,必须完成一项原本交给承包商但从未完成的工作。这不是问题,但是我现在被告知系统必须支持Firefox 3.6!不太好,但这不是我到现在都会失眠的事!系统有一个Ajax功能,它使用FormData对象,然后上传一个文档(通常是PDF)。我已经通过Firefox3.6运行了这个程序,我得到了以下信息 “未定义FormData” var formData=新的formData($('form')[0]) 这很好,因为我可以看到这个对象不受支持,我只需要使用不同的方法或收集方式。。。我

我有一项伟大的工作,必须完成一项原本交给承包商但从未完成的工作。这不是问题,但是我现在被告知系统必须支持Firefox 3.6!不太好,但这不是我到现在都会失眠的事!系统有一个Ajax功能,它使用FormData对象,然后上传一个文档(通常是PDF)。我已经通过Firefox3.6运行了这个程序,我得到了以下信息

“未定义FormData”
var formData=新的formData($('form')[0])

这很好,因为我可以看到这个对象不受支持,我只需要使用不同的方法或收集方式。。。我用了这个:

var formData = Components.classes["@mozilla.org/files/formdata;1"]
        .createInstance(Components.interfaces.nsIDOMFormData);
然而,这给了我以下的错误

获取属性的权限被拒绝 XPCComponents.class

我不确定这是为什么。。。路径“
@mozilla.org/files/formdata;1
”是否不正确?我做了更多的研究,却一事无成!于是我考虑将表单序列化,并将以下内容更改为

var formData =  {};

$.each($('form')[0].serializeArray(), function(_, kv) {
     if (formData.hasOwnProperty(kv.name)) {
         formData[kv.name] = $.makeArray(formData[kv.name]);
         formData[kv.name].push(kv.value);
     }else {
        formData[kv.name] = kv.value;
    }
});
虽然这没有错误,但是Ajax函数没有上传(我认为它没有识别或查找文件,或者只是收集文件值的字符串)。有没有人对旧浏览器中的FormData有什么建议,特别是Firefox 3.6——这是我唯一需要支持的旧浏览器

***更新***

这是HTML页面上表单的内容

<form action="" method="post" enctype="multipart/form-data" name="uploadForm" id="uploadForm" target="#">
    <label for="fileField">Rechnung hochladen</label>
    <input type="file" name="fileField" id="fileField">
    <progress id="progressbar" class="progressbar_margin hidden"></progress>
</form>

霍奇拉登酒店

我认为您应该在编写代码之前使用此选项:

netscape.security.PrivilegeManager.enablePrivilege(
    'UniversalXPConnect'
);
请务必执行以下操作:

  • 在地址栏中键入“about:config”
  • 搜索“signed.applets.codebase\u principal\u support”
  • 将该值设置为true 希望它能工作,祝你好运。

    是一个XMLHttpRequest 2级接口,可以使用XHR/Ajax轻松提交表单(包括文件上传)。正如您所发现的,它只在Firefox版本4以后的版本中可用。(具有浏览器兼容性表。)


    我建议试试这个。它支持iframe回退,以便在旧浏览器中上载文件。

    表单中包含哪些元素?如果它们是非文件输入,您应该能够使用
    $('theForm').serialize()
    作为
    .ajax()
    调用的
    数据属性。如果问题可以重新表述为“使用ajax上传文件”,则该表单很简单,包括以下内容(请参见原始问题)这可能会有所帮助:页面上说它支持firefox 3.6+。有一个显然更为最新的叉子