Actualmente estoy trabajando en un script de carga de archivos AJAX, que funciona como un encanto en Firefox pero no funciona en IE.jQuery AJAX Fileupload crossbrowser support
este es el HTML básico que estoy usando:
<form >
<input type="file" name="FileFields" id="FileFields"/>
<button type="button" onclick="uploadFile();" id="uploadButton">Upload</button>
<ul id="files"/>
... other form elements ...
</form>
<div id="fileUploadDiv"/>
esta es la función uploadfile:
function uploadFile()
{
//we don't want more then 5 files uploaded
if($('#files li').size() >= 5)
{
return;
}
//disable the upload button
$('#uploadButton').attr('disabled','disabled');
//show loading animation
$('#files').append(
$('<li>')
.attr('id','loading')
.append(
$('<img>').attr('src','/images/loading.gif')
)
.addClass('loading')
);
//add all neccessary elements (the form and the iframe)
$('#fileUploadDiv').append(
$('<form action="/uploadFile" method="post" id="fileUploadForm">')
.attr('enctype','multipart/form-data')
.attr('encoding', 'multipart/form-data')
.attr('target', 'upload_frame')
.append(
$('#FileFields').clone()
.css('visibility','hidden')
)
.append(
$('<iframe>').attr('name','upload_frame')
.load(function(){finishedPostingFile();})
.attr('id','upload_frame')
.attr('src','')
.css({
'width':'0px',
'height':'0px',
'border':'0px none #fff'
})
)
);
//start uploading the file
$('#fileUploadForm').submit();
}
y finishedPostingFile() sería la función de llamada de vuelta una vez que el iframe ha terminado publicación /cargando.
Ahora, esto funciona como un encanto en Firefox pero no funciona en IE. Ya descubrí que IE necesita attr('encoding',...)
en lugar de attr('enctype',...)
y también lo intenté sin crear el formulario y el iframe sobre la marcha al escribir esos elementos como html simple, lo que realmente no hizo la diferencia.
IE (Internet Explorer 8, para ser concreto, no se han probado en < 8) no da un error y la animación de carga simplemente sigue girando, sin que el archivo que se está siempre cargado ... Alguien tiene alguna idea sobre cómo hacer que esto funcione?
¿Alguna vez obtuvo una buena respuesta al respecto? – camainc