2012-05-09 13 views
10

Ho il grande lavoro di dover terminare un lavoro originariamente dato a un appaltatore ma non è mai stato completato. Non è un problema, ma ora mi è stato detto che il sistema deve supportare Firefox 3.6! Non eccezionale ma non qualcosa perdo il sonno fin ora! Il sistema ha una funzione Ajax che utilizza l'oggetto FormData e quindi carica un documento (di solito un PDF). Ho ho fatto funzionare questo attraverso Firefox 3.6 e ottengo il seguenteFormData non è definito - Firefox 3.6.28 alternativo

"formdata non è definito"
var formdata = new formdata ($ ('forma') [0]);

va bene come posso vedere che questo oggetto non è supportato, ho solo bisogno di utilizzare un metodo o un mezzo di raccolta diversa ... Ho usato questo:

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

Tuttavia, questo mi ha dato il seguente errore!

Permesso negato a http://10.29.100.23:8080 per ottenere proprietà XPCComponents.classes

ero incerto il motivo per cui questo è stato ... è il percorso "@mozilla.org/files/formdata;1" non è corretto? Ho fatto più ricerche e stavo arrivando da nessuna parte! Così ho quindi pensato di serializzare il modulo modificato come segue per ...

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

anche se questo didn t # errore la funzione Ajax non è stato l'uploading (presumo che non riconosceva o trovare il file o è stato semplicemente raccogliendo una stringa per il valore del file). Qualcuno ha qualche raccomandazione su un'alternativa per FormData nei vecchi browser, in particolare Firefox 3.6 - questo è l'unico vecchio browser che devo supportare.

** aggiornamento ****

questo è il contenuto del modulo nella pagina 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

Quali elementi sono contenuti nel modulo? Se sono input non file, dovresti essere in grado di usare '$ ('theForm'). Serialize()' come la proprietà 'data' della chiamata' .ajax() '. – Matt

+0

il modulo è semplice ed è composto da quanto segue (vedere la domanda originale) –

+0

Se la domanda può essere riformulata come "usa ajax per i caricamenti di file", allora questo potrebbe aiutare: http://stackoverflow.com/questions/1686099/file- upload-via-ajax-within-jquery La pagina http://valums.com/ajax-upload/ dice che supporta firefox 3.6+. C'è un fork apparentemente più aggiornato su https://github.com/bencolon/file-uploader –

risposta

0

Credo che si dovrebbe utilizzare questo prima il codice :

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

Per fare anche questo:

  1. digitare "about: config" nella barra degli indirizzi;
  2. cerca "signed.applets.codebase_principal_support";
  3. Impostare il valore su true;

Spero che funzioni, buona fortuna.

3

FormData è un'interfaccia XMLHttpRequest di livello 2 che semplifica l'invio di un modulo (inclusi i caricamenti di file) tramite XHR/Ajax. Come hai scoperto, è disponibile solo in Firefox dalla versione 4 in poi. (Lo MDN documentation ha una tabella di compatibilità del browser.)

Suggerisco di provare il jQuery Form Plugin.Supporta un fallback di iframe per il caricamento di file nei browser più vecchi.