2012-05-09 19 views
10

Mam świetną robotę, ponieważ muszę skończyć pracę, która została pierwotnie podana kontrahentowi, ale nigdy nie została ukończona. Nie jest to jednak problem, ale powiedziano mi, że system musi obsługiwać Firefoksa 3.6! Nie świetne, ale nie coś, co bym stracił przespać aż do teraz! System ma funkcję Ajax, która używa obiektu FormData, a następnie przesyła dokument (zwykle plik PDF). Mam ten prowadził przez Firefoksa 3.6 i pojawia się następującyFormData nie jest zdefiniowana - Firefox 3.6.28 alternatywa

"FormData nie jest zdefiniowana"
var formData = new FormData ($ ('form') [0]);

To dobrze, jak widzę, że ten obiekt nie jest obsługiwany, po prostu trzeba użyć innej metody lub środki kolekcji ... Kiedyś to:

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

Jednak to dało mi następujący błąd!

uprawnien dla http://10.29.100.23:8080 dostać nieruchomość XPCComponents.classes

byłem pewien, dlaczego to było ... to ścieżka "@mozilla.org/files/formdata;1" błędna? Zrobiłem więcej badań i dotarłem nigdzie! Więc wtedy myślał o szeregowania formularz zmieniła następujące czynności, aby ...

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; 
    } 
}); 

chociaż tego nie zrobił błędu # t funkcja Ajax nie było załadować (przypuszczam, że nie uznając lub znalezienia pliku lub było właśnie zbierając ciąg dla wartości pliku). Czy ktokolwiek ma jakieś zalecenia dotyczące alternatywy dla FormData w starszych przeglądarkach, zwłaszcza Firefox 3.6 - to jedyna stara przeglądarka, którą muszę obsługiwać.

** aktualizacja ****

to jest treść formularza na stronie 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

Jakie elementy są zawarte w formularzu? Jeśli nie są to pliki wejściowe, powinieneś być w stanie użyć '$ ('TheForm'). Serialize()' jako właściwości 'data' wywołania' .ajax() '. – Matt

+0

Formularz jest prosty i składa się z następujących elementów (zobacz oryginalne pytanie). –

+0

Jeśli pytanie może zostać zmienione jako "użyj ajax do przesyłania plików", może to pomóc: http://stackoverflow.com/questions/1686099/file- upload-via-ajax-within-jquery http://valums.com/ajax-upload/ strona mówi, że obsługuje firefox 3.6+. Na stronie https://github.com/bencolon/file-uploader widnieje bardziej aktualny fork –

Odpowiedz

0

myślę, że należy to wykorzystać przed kodem :

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

Na pewno rób również:

  1. wpisz "about: config" na pasku adresu;
  2. wyszukaj "signed.applets.codebase_principal_support";
  3. Ustaw wartość na true;

Mam nadzieję, że działa, powodzenia.

3

FormData to interfejs poziomu XMLHttpRequest poziomu 2, który ułatwia przesyłanie formularzy (w tym wysyłanie plików) za pomocą XHR/Ajax. Jak już odkryłeś, jest on dostępny tylko w Firefoksie od wersji 4. (MDN documentation ma tabelę zgodności przeglądarki).

Proponuję wypróbować jQuery Form Plugin.Obsługuje awarię iframe w przypadku przesyłania plików w starszych przeglądarkach.