如何使新的FormData()在IE浏览器上运行

时间:2013-04-02 05:29:20

标签: php jquery ajax

如何在IE上完成这项工作? 这不适用于IE浏览器,IE浏览器不支持新的FormData()API,是否有其他api等同于IE中的新FormData()?

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 个答案:

答案 0 :(得分:5)

最好使用jquery形式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;
    });

答案 1 :(得分:4)

实际上我对我的代码进行了更改,以便能够在所有其他浏览器中使用$ .ajax,并为这样的IE浏览器制作了iframe。

mailer.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]>

form.php的

<form id="form" action="form-exec.php" target="_self" method="post" enctype="multipart/form-data">
    <input type="text" name="email-to" value="" />
    <input type="text" name="email-subject" value="" />
    <input type="text" name="email-message" value="" />
    <input type="file" name="file" />
    <input type="file" name="file2" />
    <button type="submit" name="email-send">Skicka</button>
</form>

,在我的例子中,form-exec.php是我的PHPmailer发件人!

答案 2 :(得分:1)

AFAIK只能在IE9 +中使用。 要上传文件'ajax like',你应该使用iframe技巧。 我在实现它时使用它作为源:

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

答案 3 :(得分:-3)

显然,IE中不支持FormData。但是,您可以像这样使用jQuery的序列化:

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