IE9在文件上传后不调用ajax方法

时间:2012-08-22 07:53:48

标签: jquery internet-explorer-9

我创建了一个简单的文件上传页面。为了保持简单,我没有使用iFrame来包含文件输入。因此,文件提交会触发页面重新加载,因为表单已提交。为了在页面上显示上传的文件名,需要这样做。文件名是通过jQuery中的AJAX调用获取的。

一切都像Chrome,Firefox,Opera,Mac和Windows上的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" ) );
      }
   } );
最奇怪的是,日志条目出现在日志中,但始终具有相同的值。在调试模式下查看内容可以确认这一点。数组总是一样的。

没有启用Comet。这是一个简单的jQuery应用程序。

如果有人有线索。

1 个答案:

答案 0 :(得分:0)

看起来IE9试图了解缓存并缓存未明确设置为过期的所有内容。

我的解决方案是在抵达时更改响应(我使用泽西岛)到期。这是如何运作的。

正常回应:

return Response.ok( jsForms.toJSONString(), MediaType.APPLICATION_JSON_TYPE ).build();

过期回复:

return Response.ok( jsForms.toJSONString(), MediaType.APPLICATION_JSON_TYPE ).expires( new Date( 1000 ) ).build();

注意添加expires( new Date( 1000 ) )

这就是诀窍。