2013-03-18 10 views
19

Mam zaimplementowany ten skrypt do przesyłania plików z ajaxem, działa idealnie w innych przeglądarkach z wyjątkiem explorer, zauważyłem, że formData nie jest obsługiwana przez IE9 i mniej, czy są jakieś alternatywy dla formData w IE, i chcę używać czystej JavaScriptFormData w IE8/9

function doObjUploadExplorer(url, lnk_id, file, progress, success, content, frm, div_dlg, start_func){ 
    var file_input = null, 
     frm_data = new FormData(), 
     req; 

    try { 
     //firefox, chrome, safari etc 
     req = new XMLHttpRequest(); 
    } 

    catch (e) { 
     // Internet Explorer Browsers 
     req = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 


if (document.getElementById(file)) { 
    file_input = document.getElementById(file); 

    for (var i = 0; i < file_input.files.length; ++i) { 
     frm_data.append(file, file_input.files[i]); 
    } 
} 

req.upload.addEventListener('progress', function(e) { //Event called while upload is in progress 
    if (progress !== undefined 
      && e.lengthComputable) { 
     $('#' + progress).html('<font>Uploading... ' + Math.round((e.loaded/e.total) * 100) + '%</font>'); 
    } 
}); 

req.upload.addEventListener('load', function(e) { //Event called when upload is completed 
    $('#' + progress).html('<font>Retrieving updated data...</font>'); 
}); 

req.upload.addEventListener('error', function(e) { //Event called when an error is returned by the server 
    alert('An error has occurred...'); 
}); 

req.addEventListener('readystatechange', function(e) {   
    if (this.readyState === 4) { 
     if (this.status === 200) { 
      if (content !== undefined) { 
       $('#' + content).html(this.response); 
      } 

      if (success !== undefined) { 
       showChkMark(success); 
      } 
     } else { 
      console.log('Server replied with HTTP status: ' + this.status); 
     } 


     if (progress !== undefined) { 
      $('#' + progress).hide(); 
     } 

     if (div_dlg !== undefined) { 
      $('#' + div_dlg).dialog('close'); 
     } 

     $('#' + file) 
     .attr('disabled', false) 
     .val(''); 
    } 
}); 

if (progress !== undefined) { 
    $('#' + progress).show(); 
} 

$('#' + file).attr('disabled', true); 
url += (
     url.indexOf('?') === -1 
     ? '?' 
     : '&' 
    ); 
url += 'lnk_id=' + lnk_id + '&file=' + file; 
req.open('POST', url); 
req.setRequestHeader('Cache-Control', 'no-cache'); 

if (start_func !== undefined) { 
    start_func.apply(); 
    setTimeout(function() { 
     req.send(frm_data); 
    }, 500); 
} else { 
    req.send(frm_data); 
}} 
+0

Nie sądzę, że istnieje jakakolwiek alternatywa. –

+0

Sprawdź ten sam wpis, tak naprawdę nie ma mowy obejmij to. http://stackoverflow.com/questions/7899513/send-multipart-formdata-with-jquery-ajax-in-ie –

+0

[Miałem podobny problem z plikami [0] i FormData. To rozwiązanie działało dla mnie] (https://stackoverflow.com/questions/26206105/formdata-in-ie-11-not-defined) – SJ03

Odpowiedz

19

FormData w IE jest obsługiwana tylko z IE10, po robi rozeznanie najlepszym rozwiązaniem dla tego (moim zdaniem) byłoby korzystania ajaxForm: http://malsup.com/jquery/form/ działa idealnie w IE8/9, nie wiem o IE7

+11

Działa idealnie, jeśli masz lepszą wtyczkę, proszę doradzić ... – Lappies

+0

Które lepszej wtyczki użyłeś wtedy? –

+2

Twój link nie ma nic wspólnego z żadnym ajaxForm, ale raczej 'jquery-upload-progress'. – ProfK

Powiązane problemy