Как опубликовать файл и разобрать ответ XML в Internet Explorer 7 - PullRequest
0 голосов
/ 12 ноября 2010

Я написал веб-приложение, которое отправляет файл через http в спокойный веб-сервис. Веб-служба может ответить 400 или 403, если служба обнаружит какие-либо проблемы с запросом. Ответ также содержит xml, описывающий причину (ы) ответа с кодом ошибки http.

Мое веб-приложение отправляет файл в скрытый iFrame и использует обработчик события onload iFrame для выполнения функции, которая анализирует ответ сервера, представленный в iFrame, и сообщает пользователю, как прошла загрузка файла.

Мое решение отлично работает с Firefox и Chrome, но не с Internet Explorer 7.

Моя проблема в том, что если сервер отвечает кодом ошибки, например, 400 или 403 Internet Explorer 7 загружает свою собственную страницу статической ошибки. Это означает, что мой сценарий не может проанализировать сообщение об ошибке, отправленное в ответе, поскольку страница статической ошибки не находится в том же домене, что и сам сценарий, и нарушает ту же политику происхождения (и, поскольку это страница статической ошибки, подробная ошибка веб-службы сообщения все равно не будет).

Я вижу только два обходных решения этой проблемы, и я бы предпочел избегать их обоих, если это возможно:

A) Вернуть 200 веб-службе, когда пользовательский агент указывает Internet Explorer, даже если произошла ошибка, но включить ответ xml, который указывает на ошибку.

B) Отправьте сообщение веб-приложения «посреднику», который направит запрос веб-службе, прочитает ответ и затем переведет его на 200 или что-то еще, что работает (так что это в основном вариант А, но более гибкий и по крайней мере, это сохраняет "чистый" оставшийся веб-сервис).

Есть ли другой способ решить мою проблему?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2010

Мне удалось решить эту проблему, поскольку коллега вспомнил, что если при отправке ответа 4xx тело ответа не имеет определенной длины, Internet Explorer загрузит свою страницу статической ошибки.

Обходной путь должен отправить обратноболее длинное тело ответа с вашим ответом 4xx, например, xml-комментарий, содержащий пробелы.

0 голосов
/ 13 ноября 2010

Предполагая, что у вас есть контроль над сервером, вы можете найти лучшее решение - использовать iframe только для отправки файла (т. Е. В одну сторону .... с клиента на сервер). Затем используйте решение опроса ajax, чтобы определить, была ли публикация успешной. Это может быть немного грязно, но должно быть намного более надежным, и вы также можете получить информацию обратно до того, как сообщение будет завершено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...