我创建了一个简单的文件上传页面。为了保持简单,我避免使用 iFrame 来包含文件输入。因此,文件提交会触发页面重新加载,因为表单已提交。这是为了在页面上显示上传的文件名所必需的。文件名是通过 jQuery 中的 AJAX 调用获取的。
在 Mac 和 windows 上的 Chrome、Firefox、Opera、Safari 中,一切都像魅力一样工作(我没有测试过 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 应用程序。
如果有人有线索。