FormData не определен — альтернатива Firefox 3.6.28

У меня есть отличная работа, заключающаяся в том, чтобы закончить работу, изначально порученную подрядчику, но так и не выполненную. Не проблема, однако мне сказали, что система должна поддерживать Firefox 3.6! Не здорово, но не то, из-за чего я бы потерял сон до сих пор! В системе есть функция Ajax, которая использует объект FormData, а затем загружает документ (обычно PDF). Я запустил это через Firefox 3.6 и получил следующее

"Данные формы не определены"
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>

person Mike Sav    schedule 09.05.2012    source источник
comment
Какие элементы входят в форму? Если это нефайловые входные данные, вы можете просто использовать $('theForm').serialize() в качестве свойства data вызова .ajax().   -  person Matt    schedule 09.05.2012
comment
форма проста и состоит из следующего (см. исходный вопрос)   -  person Mike Sav    schedule 09.05.2012
comment
Если вопрос можно перефразировать как использование ajax для загрузки файлов, это может помочь: stackoverflow.com/questions/1686099/ valums.com/ajax -upload говорит, что поддерживает firefox 3.6+. На github.com/bencolon/file-uploader есть явно более современная вилка.   -  person Darren Cook    schedule 10.05.2012


Ответы (2)


FormData — это интерфейс XMLHttpRequest уровня 2, который делает его легко отправить форму (включая загрузку файлов) с помощью XHR / Ajax. Как вы уже поняли, он доступен только в Firefox версии 4 и выше. (В документации MDN есть таблица совместимости браузеров.)

Я предлагаю попробовать плагин форм jQuery. Он поддерживает резервный вариант iframe для загрузки файлов в старых браузерах.

person Jeffery To    schedule 18.06.2012

Я думаю, вы должны использовать это перед своим кодом:

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

Чтобы быть уверенным, также сделайте это:

  1. введите «about:config» в адресной строке;
  2. найдите «signed.applets.codebase_principal_support»;
  3. Установите значение true;

Надеюсь сработает, удачи.

person Giovanni Di Toro    schedule 11.05.2012