#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");