IE6将IFRAME响应解释为文件

时间:2011-05-28 00:45:46

标签: iframe file-upload internet-explorer-6

我在IE6中遇到了一个奇怪的行为,我需要一些帮助才能搞清楚。

我使用javascript:

将以下DOM元素添加到文档正文的末尾
<IFRAME id="qq-upload-handler-iframe0" style="DISPLAY: none" src="javascript:false;" />

<FORM method="post" target="qq-upload-handler-iframe0" encType="multipart/form-data" style="DISPLAY: none" action=/AgriShare-AD-Sys/ajaxfileupload?clientId=importSubmissionFromExcelLinkId&qqfile=AB_PTPTA_10358.xls>
  <INPUT type="file" value="AB_PTPTA_10358.xls">
</FORM>

然后我使用javascript提交表单。 action指向一个返回以下内容的servlet:

HTTP/1.1 200 OK
Date: Fri, 27 May 2011 23:33:48 GMT
Server: Oracle-Application-Server-10g/10.1.3.5.0 Oracle-HTTP-Server
Set-Cookie: JSESSIONID=b59f0434f57ace32aebc8b6d113c7e48171824e1d157cf99152140657e6c68a5.e34PaNiLaNuPbO0OaN8Rb3aRbN50; path=/AgriShare-AD-Sys
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/octet-stream; charset=ISO-8859-1


f  
{success: true}
0

我的目的是让{success: true}最终进入iframe的主体,我可以使用iframe.attachEvent('onLoad', callback)从我附加的回调中访问它。回调完成后,我删除表单和iframe,以便可以在同一页面上再次运行此代码。这实际上有效,但加载页面后从未第一次

我第一次提交该表单时,IE6向我提供了一个“文件下载”对话框,要求我保存一个名为ajaxfileupload.xls的文件。如果我将其保存,则此文件包含{success: true},该文件应放入iframe!此外,永远不会调用回调。

然而,任何后续调用都能完美运行!响应数据最终在iframe文档正文中,并且回调被执行。

我比较了第一次和第二次尝试的数据包跟踪,它们是相同的,所以这必须是浏览器问题。为什么IE6想要第一次将响应保存到文件中?

感谢。

更新

我刚用Tomcat做过同样的事情,问题就消失了。 Tomcat的反应如下:

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 May 2011 00:13:32 GMT
Server: Apache-Coyote/1.1

f
{success: true}
0

仍需要弄清楚为什么它不能在Oracle上工作......

1 个答案:

答案 0 :(得分:1)

解决方案是将我的servlet中的content-type显式设置为text/html

response.setContentType("text/html");