Ответ IFRAME интерпретируется как файл IE6 - PullRequest
0 голосов
/ 28 мая 2011

У меня странное поведение в IE6, и мне нужна помощь, чтобы разобраться в этом.

Я добавляю следующие элементы DOM в конец тела моего документа, используя javascript:

<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 указывает на сервлет, который возвращает следующее:

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 хочет сохранить ответ в файл в первый раз?

Спасибо.

UPDATE:

Я только что попробовал то же самое с 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 Ответ

1 голос
/ 31 мая 2011

Решение состояло в том, чтобы явно установить content-type в моем сервлете на text/html.

response.setContentType("text/html");
...