как заставить новую FormData () работать в браузерах IE

Как я могу сделать эту работу в IE? Это не будет работать на IE, новый API FormData () не поддерживается браузерами IE, есть ли другой api, эквивалентный new FormData () в IE?

var fd = new FormData();
fd.append( "userfile", $("#userfile")[0].files[0]);

$.ajax({
    url : '/user/ajax_upload/',
    type: 'POST',
    contentType:false,
    cache: false,
    data: fd,
    processData: false,
    beforeSend :function(){
    },
    success : function( data ) {
        $('#popupbox').html(data);  
    }
});

4 ответов


лучше использовать jQuery form Js для отправки изображений через ajax. Я нашел это лучше, чем FormData()

<script type="text/javascript" src="/js/jquery.form.js"></script>

function update_professional_details(){
    var options = { 
                url     : '/validateform/personal',
                type    : $("#personal_edit_form").attr('method'),
                dataType: 'json',
                success:function( data ) {
                    var msg = data.msg;
                    if(data.status == 'success'){
                        $("#msg_data").html("Updated successfully, redirecting...")
                        $("#personal_edit_form").submit();
                    }else{
                        $('p[class$="_error2"]').html('');
                        var msg = data.msg;
                        $.each(msg, function(k, v) {
                            $('.'+k+'_error2').html(v);
                        });
                    }
                },
            }; 
            $('#personal_edit_form').ajaxSubmit(options);
                return false;
        }

    $('#updatepersonal').click(function(){
        update_professional_details();
            return false;
    });

На самом деле я внес изменения в свой код, чтобы иметь возможность использовать $.ajax во всех других браузерах и просто сделал iframe для браузеров IE, подобных этому.

Мейлер.в PHP

<!--[if IE]>
   <iframe src="form.php"></iframe>
<![endif]-->

<![if !IE]>
<script>
    $(document).ready( function() {
        //Program a custom submit function for the form
        $("#form").submit(function(event){

          //disable the default form submission
          event.preventDefault();

          //grab all form data  
          var formData = new FormData($(this)[0]);

          $.ajax({
            url: $("#form").attr('action'),
            type: 'POST',
            data: formData,
            async: false,
            cache: false,
            contentType: false,
            processData: false,
            success: function (returndata) {
              alert(returndata);
            }
          });

          return false;
        });
    });
</script>

<?php include_once ('form.php'); ?>

<div id="email-success"></div>
<![endif]>

AFAIK это возможно только в IE9+. Чтобы загрузить файл "ajax like", вы должны использовать трюк iframe для этого. Я использовал это как источник при его реализации:

http://ramui.com/articles/ajax-file-upload-using-iframe.html


по-видимому, FormData не поддерживается в IE. Однако вы можете использовать сериализацию jQuery следующим образом:

        var FD = $('form').serialize();