Javascript FormData对象在Internet Explorer 10中可用吗?

Javascript FormData对象在Internet Explorer 10中可用吗?,javascript,ajax,html,internet-explorer,file-upload,Javascript,Ajax,Html,Internet Explorer,File Upload,我正在编写一个小JavaScript应用程序,它允许我异步上传图像 这个脚本在每个浏览器中都非常有效,除了猜猜是谁,Internet Explorer 因此,我做的第一件事是使用jQuery的AjaxForm插件为IE9版本创建回退,这非常有效 下面是JS脚本 $("#Uploader").change(function(e){ var form = $("#UploaderForm"); form.trigger('submit'); $(thi

我正在编写一个小JavaScript应用程序,它允许我异步上传图像

这个脚本在每个浏览器中都非常有效,除了猜猜是谁,Internet Explorer

因此,我做的第一件事是使用jQuery的AjaxForm插件为IE9版本创建回退,这非常有效

下面是JS脚本

$("#Uploader").change(function(e){
        var form = $("#UploaderForm");
        form.trigger('submit');
        $(this).attr('disabled','disabled');
        e.preventDefault();
});
$("#UploaderForm").submit(function(e){
        e.preventDefault();
        e.stopPropagation();
        var type="POST";var loading=$("#PhotoIsLoading");
        if(windowApi === true){
            var formData = new FormData($(this)[0]);
            $.ajax({
                url: url,
                type: type,
                xhr: function() {
                    myXhr = $.ajaxSettings.xhr();
                    if(myXhr.upload){ myXhr.upload.addEventListener('progress',progressHandlingFunction, false);}
                    return myXhr;
                },
                beforeSend: function(){loading.removeClass('isHidden_important');},
                success: function(response){
                    jres = JSON.parse(response);
                    alert("Test ok, file uploaded");
                },
                error: function(response){console.warn(response);},
                data: formData, 
                cache: false,
                contentType: false,
                processData: false
            });
            e.preventDefault();
        }else{
            $(this).ajaxSubmit({
                url: url,
                dataType: 'json',
                type: type,
                beforeSubmit: function(){loading.removeClass('isHidden_important');$(this).formSerialize();},
                success:function(response){
                    jres = JSON.parse(response);
                    alert("FallbackTest Complete");
                },
                error: function(response){console.warn(response);},
            });
            e.preventDefault();
            return false;
        }
    });
WindowApi
和其他所有变量都是在全局脚本中定义的,但别担心,它们可以工作。准确地说,
WindowApi
是这样的:

var windowApi=true;
if(window.File&&window.FileReader&&window.FileList&&window.Blob){
console.log("window.api ready");windowApi=true;}
else{console.log("window.api not ready");windowApi=false;};
所以,通过这些代码行,我可以处理每个浏览器和IE9浏览器

现在的问题是IE10,因为它拥有所有的
窗口。*
方法,并且可以使用
FormData
对象。但是,当我尝试上载带有IE10和FormData的内容时,我收到FormData对象的“访问被拒绝”错误

此过程中涉及的HTML是:

<form name="UploaderForm" id="UploaderForm" method="post" enctype="multipart/form-data">
    <input type="file" name="Uploader" id="Uploader" accept="image/*" tabindex="1" />
</form>

所以最后我的问题是:

在尝试访问FormData对象时,如何避免IE10中出现“访问被拒绝”异常?

,这可能很有用。IE对于如何通过编程方式使用
非常严格

在第一行的基础上,将第一行更改为该行是否可以解决问题

$("#Uploader").on('click', function(e){ /* rest of the function unchanged... */

当您提交的表单中的字段被javascript弄乱时,访问被拒绝。您在uploadfield上动态添加了
disabled
属性,这可能是您收到
拒绝访问的原因。也许您应该在不禁用
change
事件上的字段的情况下尝试一下

顺便说一下,您最好结合
文件API检查
FormData
的可用性:

var formDataSupport = false;
if (typeof FormData === 'function' && 
    window.File && 
    window.FileReader && 
    window.FileList && 
    window.Blob)
{
  console.log("File API available, formData available");  
  formDataSupport = true; 
}

这个解决方案非常适合IE10,但我对IE9仍有一些问题-但我认为我必须找到另一个解决方案,而不是“FormData Obj”。这对于以前的控件来说是可以的,但我需要一些东西来防止IE10中的错误@Alex编写了正确的解决方案。Thnx+1