我在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上工作......
答案 0 :(得分:1)
解决方案是将我的servlet中的content-type
显式设置为text/html
。
response.setContentType("text/html");