2012-05-09 74 views
10

我不得不玩完原來給承包商工作的偉大的工作,但從未完成。不過,我現在被告知系統必須支持Firefox 3.6!不是很好,但不是我會失眠直到現在!系統具有使用FormData對象的Ajax函數,然後上載文檔(通常爲PDF)。我已經通過Firefox 3.6的跑了這一點,我得到以下FORMDATA沒有定義 - 火狐3.6.28替代

「沒有定義FORMDATA」
VAR FORMDATA =新FORMDATA($( '形式')[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> 
+1

表單中包含哪些元素?如果它們是非文件輸入,那麼應該可以使用$('theForm')。serialize()'作爲'.ajax()'調用的'data'屬性。 – Matt

+0

表單很簡單,包含以下內容(請參閱原始問題) –

+0

如果問題可以改爲「使用ajax進行文件上傳」,那麼這可能有所幫助:http://stackoverflow.com/questions/1686099/file-通過ajax-jQuery上傳http://valums.com/ajax-upload/頁面表示它支持firefox 3.6+。在https://github.com/bencolon/file-uploader上有一個顯然更新的fork –

回答

0

我想你你的代碼之前,應使用此上的內容:

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

也可以這樣做:

  1. 在地址欄中鍵入「about:config」;
  2. 搜索將 「signed.applets.codebase_principal_support」;
  3. 將值設置爲true;

希望工程,好運氣。

3

FormData是一個XMLHttpRequest級別2的界面,可以很容易地提交表單使用XHR/AJAX(包括文件上傳)。正如您發現的那樣,它僅適用於從版本4開始的Firefox。 (該MDN documentation有一個瀏覽器的兼容性表。)

我建議您嘗試jQuery Form Plugin。它支持在舊版瀏覽器中上傳文件的iframe後備。