10

我不得不完成最初交给承包商但从未完成的工作。没问题,但是我现在被告知系统必须支持 Firefox 3.6!不是很好,但直到现在我都不会失眠!系统有一个 Ajax 函数,它使用 FormData 对象然后上传一个文档(通常是 PDF)。我已经通过 Firefox 3.6 运行了这个,我得到了以下信息

"FormData 未定义"
var formData = new FormData($('form')[0]);

没关系,因为我可以看到不支持此对象,我只需要使用不同的方法或收集方式...我使用了这个:

var formData = Components.classes["@mozilla.org/files/formdata;1"]
        .createInstance(Components.interfaces.nsIDOMFormData);

然而,这给了我以下错误!

http://10.29.100.23:8080获取属性 XPCComponents.classes的权限被拒绝

我不确定这是为什么……路径“ @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>
4

2 回答 2

3

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

我建议尝试jQuery Form Plugin。它支持在旧浏览器中上传文件的 iframe 后备。

于 2012-06-18T12:33:08.990 回答
0

我认为您应该在代码之前使用它:

netscape.security.PrivilegeManager.enablePrivilege(
    'UniversalXPConnect'
);

确保也这样做:

  1. 在地址栏中输入“about:config”;
  2. 搜索“signed.applet.codebase_principal_support”;
  3. 将值设置为 true;

希望它有效,祝你好运。

于 2012-05-11T22:38:50.797 回答