我创建了一个简单的文件上传页面。为了保持简单,我避免使用iFrames来包含文件输入。因此,文件提交会触发页面重新加载,因为表单已提交。这是为了在页面上显示上传的文件名称而需要的。文件名是通过jQuery中的AJAX调用获取的。IE9在文件上传后不调用ajax方法
一切就像在Chrome,火狐,歌剧,Safari在Mac和Windows魅力(我没有测试过Linux,但我想它也能工作)
我的问题是,在IE9中,当我打开浏览器,ajax调用并显示数据。但是一旦文件上传完成,就停止工作。
为了确保服务器在调试模式下启动,并在服务方法中设置了断点。只要没有文件上传,就会达到中断点。
一旦文件上传完毕(顺便说一句),断点不会到达。 IE9不调用服务方法,并且数据不再改变。即使导航到另一个页面(google.com),并通过编写URL再次加载页面也无济于事。
这是迄今为止我在浏览器中看到的最奇怪的行为:表单被提交并且文件被发送,但没有执行后续的ajax调用并且页面没有改变。但是,JavaScript的行为就像进行了AJAX调用一样。只是服务器不再涉及。
这是形式:
<form method="post" action="${pageContext.request.contextPath}/services/prepop/upload/csv"
id="fileUploadForm" enctype="multipart/form-data">
<div class="file-upload">
<input id="uploadedFile"
type="file"
name="uploadedFile"
onchange="submit()"/>
</div>
<input type="hidden" name="formId" value='{{formId}}'/>
<input type="hidden" name="contentId" value='{{id}}'/>
<input type="hidden" name="page" value='upload'/>
</form>
这是Ajax调用
app.log("getting the form files");
$.ajax({
url:"${pageContext.request.contextPath}/services/jsonrest/prepop/list",
type:"GET",
async:true,
data:[
{name:"formId", value:formId}
],
success:function (prepopContentList) {
app.log("the content file list was fetched with " + prepopContentList.length + " entries");
upload.populateEntryList(prepopContentList, $("#fileUploadList"));
}
});
最奇怪的事是,日志条目出现在日志,但总是以同样的价值观。在调试模式下查看内容证实了这一点。数组总是相同的。
没有启用彗星。这是一个普通的jQuery应用程序。
如果有人有线索。