2013-03-18 13 views
19

ho implementato questo script per caricare file con ajax, funziona perfettamente in altri browser ad eccezione di explorer, ho notato che formData non è supportato da IE9 e meno, ci sono alternative per formData in IE, e voglio usare javascript pulitaFormData in 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

Non penso ci sia alcuna alternativa –

+0

Controlla questo post simile, non c'è davvero alcun modo a intorno a questo. http://stackoverflow.com/questions/7899513/send-multipart-formdata-with-jquery-ajax-in-ie –

+0

[Ho affrontato il problema simile con i file [0] e FormData. Questa soluzione ha funzionato per me] (https://stackoverflow.com/questions/26206105/formdata-in-ie-11-not-defined) – SJ03

risposta

19

formdata in IE è supportato solo da IE10, dopo aver fatto qualche ricerca della migliore soluzione per questo (il mio parere) sarebbe utilizzando ajaxForm: http://malsup.com/jquery/form/ funziona perfettamente in IE8/9, non è sicuro circa IE7

+11

Funziona perfettamente, se si dispone di un plug-in migliore, si prega di avvisare ... – Lappies

+0

Quale miglior plugin hai usato allora? –

+2

Il tuo link non ha nulla a che fare con alcun ajaxForm ma piuttosto 'jquery-upload-progress'. – ProfK

Problemi correlati