Итак, AJAX использует HTTP-запросы на основе XML.Это другой протокол, чем запрос на загрузку файла.Загрузка файла - это двоичный http-запрос.
Во-первых, хотя объект XmlHttpRequest может анализировать данные в XML, вы также можете получить полные данные, будь то двоичные или нет.Вы можете разбирать его на что угодно.
Во-вторых, это не другой протокол.Протокол HTTP.HTTP передает данные и выполняет согласование содержимого в обоих случаях.
В-третьих, запросы HTTP GET (в обоих случаях один и тот же тип запроса) могут возвращать двоичные или текстовые данные полностью независимо от того, как сгенерирован запрос.,Запрос может быть сгенерирован с помощью тега, или пользователем, нажимающим на ссылку, или XMLHttpRequest, и тип содержимого (двоичный или текстовый) полностью не зависит от того, как был сгенерирован запрос.
Реальная причина, по которой вы можетене загружать файл с помощью XMLHttpRequest, но вместо этого приходится использовать специфичные для браузера расширения, такие как nsIWebBrowserPersist, так как браузеры решили не обращать внимания на заголовок Content-Disposition при чтении данных, возвращаемых из XMLHttpRequest, так же, как при чтенииданные для страницы верхнего уровня (или - вы можете инициировать загрузку, получая данные через невидимый iframe)
Лично я считаю, что это плохой выбор для веб-браузеров, поскольку нет дополнительной безопасности,Единственное неудобство для разработчиков.Невозможно отправить Accept: заголовки или глаголы, кроме GET, отправляя запросы с элементом IFRAME или IMG, поэтому вы не можете контролировать согласование содержимого.Вместо этого вы должны экранировать протокол HTTP в параметры GET, что я нахожу печальным и не-REST-ful.
Для получения дополнительной информации о nsIWebBrowserPersist см. https://developer.mozilla.org/en/Code_snippets/Downloading_Files