Javascript FormData对象在Internet Explorer 10中可用吗?
我正在编写一个小JavaScript应用程序,它允许我异步上传图像 这个脚本在每个浏览器中都非常有效,除了猜猜是谁,Internet Explorer 因此,我做的第一件事是使用jQuery的AjaxForm插件为IE9版本创建回退,这非常有效 下面是JS脚本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
$("#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