2012-05-09 15 views
10

Tengo el gran trabajo de tener que terminar un trabajo originalmente entregado a un contratista, pero nunca fue completado. No es un problema, sin embargo, ahora me han dicho que el sistema debe ser compatible con Firefox 3.6. ¡No es genial, pero no es algo en lo que perdería el sueño hasta ahora! El sistema tiene una función Ajax que usa el objeto FormData y luego carga un documento (generalmente un PDF). He encontré con esto a través de Firefox 3.6 y me sale el siguienteFormData no está definido - Firefox 3.6.28 alternativa

"FormData no está definido"
var = new FormData FormData ($ ('form') [0]);

eso está bien que he podido ver que este objeto no se admite, que sólo tiene que utilizar un método o medio de colección diferente ... He utilizado este:

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

Sin embargo, esto me dio el siguiente error!

ha denegado el permiso para http://10.29.100.23:8080 para conseguir la propiedad XPCComponents.classes

no estaba seguro de por qué esto era ... es el camino "@mozilla.org/files/formdata;1" incorrecto? Hice más investigación y no estaba llegando a ninguna parte. Así que entonces pensé en la serialización de la forma cambió la siguiente a ...

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

aunque esto didn t # error la función Ajax no fue subiendo (supongo que no estaba reconociendo o encontrar el archivo o que estaba simplemente recolectando una cadena para el valor del archivo). ¿Alguien tiene alguna recomendación sobre una alternativa para FormData en los navegadores más antiguos, especialmente Firefox 3.6? Ese es el único navegador antiguo que tengo que admitir.

** actualización ****

este es el contenido del formulario en la página 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

¿Qué elementos están contenidos en el formulario? Si son entradas que no son de archivo, debería poder usar '$ ('theForm'). Serialize()' como la propiedad 'data' de la llamada' .ajax() '. – Matt

+0

el formulario es simple y consta de lo siguiente (vea la pregunta original) –

+0

Si la pregunta se puede reformular como "use ajax para subir archivos", esto podría ayudar: http://stackoverflow.com/questions/1686099/file- upload-via-ajax-within-jquery La página http://valums.com/ajax-upload/ dice que es compatible con Firefox 3.6+. Hay un fork aparentemente más actualizado en https://github.com/bencolon/file-uploader –

Respuesta

0

creo que puedes usar esto antes de su código :

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

Para estar seguro también haga esto:

  1. escriba "about: config" en su barra de dirección;
  2. busque "signed.applets.codebase_principal_support";
  3. Establezca el valor en verdadero;

Espero que funcione, buena suerte.

3

FormData es una interfaz XMLHttpRequest de nivel 2 que hace que sea fácil enviar un formulario (incluidas las cargas de archivos) utilizando XHR/Ajax. Como has descubierto, solo está disponible en Firefox desde la versión 4 en adelante. (El MDN documentation tiene una tabla de compatibilidad del navegador.)

Sugiero probar el jQuery Form Plugin.Es compatible con una alternativa de iframe para cargar archivos en navegadores más antiguos.