FormData未定义 - Firefox 3.6.28替代方案

时间:2012-05-09 10:50:36

标签: javascript jquery form-data

我的工作非常出色,原本必须完成一份最初给承包商的工作,但从未完成。不是问题但我现在被告知系统必须支持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;
    }
});

虽然没有#t错误,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>

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

还要确保这样做:

  1. 在地址栏中输入“about:config”;
  2. 搜索“signed.applets.codebase_principal_support”;
  3. 将值设置为true;
  4. 希望它有效,祝你好运。