Ответ IFRAME, интерпретируемый IE6 как файл

#iframe #file-upload #internet-explorer-6

#iframe #загрузка файла #internet-explorer-6

Вопрос:

Я получаю странное поведение в 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=importSubmissionFromExcelLinkIdamp;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 хочет сохранить ответ в файл в первый раз?

Спасибо.

Обновить:

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

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

 response.setContentType("text/html");