как вывести файл в браузер после вызова jquery ajax - PullRequest
5 голосов
/ 15 сентября 2011

У меня есть ссылка на веб-сайте на файл php, который генерирует собственный файл Excel на лету, и выводит его прямо в браузер через заголовки, чтобы пользователь мог открыть / сохранить. Поскольку для генерации файла требуется некоторое время, я бы хотел использовать jQuery Ajax для выполнения вызова и использовать некоторую анимацию загрузки между тем.

Единственное, что я не знаю, как это сделать, это как вывести файл в браузер после вызова Ajax? Это вообще возможно?

Ответы [ 3 ]

3 голосов
/ 21 сентября 2011

( NB Это перефразирование ответа @ dmitry, но только что уточненное)

Проблема, с которой вы столкнулись, заключается в том, что нет возможности напрямую вернуть файл пользователю черезAJAX - браузер должен запрашивать файл, используя обычный синхронный HTTP-запрос.

Чтобы решить эту проблему, вашему PHP потребуется:

  1. Создать файл Excel как обычно.
  2. Вместо того, чтобы записывать файл обратно пользователю, сохраните его где-нибудь в файловой системе сервера (т.е. используя file_put_contents() или аналогичный).
  3. Верните файл path вuser.

Ваш JS при получении этого ответа должен будет:

  1. Считать путь к файлу Excel обратно из сценария PHP.
  2. Открытьфайл Excel в новой вкладке / окне, используя window.open() (или перенаправить в текущей вкладке / окне, установив location.href).
1 голос
/ 15 сентября 2011

Я думаю, что вы можете сделать трюк: сгенерировать файл и вернуть путь к сгенерированному файлу в своем ответе Ajax, а затем просто вызвать

window.location = fileUrl

, также есть некоторые методы с iframe Ajax

0 голосов
/ 15 сентября 2011

Почему вы не используете iframe, где вы загружаете фактический php-файл, который генерирует файл excel? Таким образом, вы не будете блокировать пользовательский интерфейс во время создания файла, и браузер вызовет диалог загрузки.

Нет способа отправить файл через javascript, по крайней мере, не заставляя браузер открывать диалог загрузки.

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