Загрузка Force после вызова ajax

У меня есть php-скрипт, который ждет аякс-звонков в

www.mydomain.com/file.php

Вызов ajax содержит некоторые переменные, которые файл.php будет использовать для генерации некоторых результатов csv,

Возможно ли, что пользователь сможет загрузить содержимое csv, созданное файлом file.php, не сохраняя его где-нибудь на сервере и прочее?

Я не хочу перенаправлять пользователя на любую другую страницу, я хочу, чтобы они нажимали кнопку, затем смотрели диалоговое окно загрузки и позволяли загружать файл csv.

Solutions Collecting From Web of "Загрузка Force после вызова ajax"

Конечно, в файле PHP перед тем, как вы вывести что-либо, установите тип содержимого на что-то, что браузер загрузит:

header("Content-Type: application/octet-stream"); 

Кроме того, это хорошая практика, чтобы включить тоже (и позволяет предложить имя файла):

 header("Content-Disposition: attachment; filename=somefile.csv;"); 

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

Ввод элементов в форму и представление их просто кажется взломанным, и я не чувствую себя комфортно, используя его.

Когда вы используете эти типы вещей, я думаю, что вы немного рискуете, следующие версии браузеров могут просто не поддерживать их.

Кроме того, я передаю сложные массивы в качестве параметров в моем вызове ajax на сервер, и их нелегко преобразовать в html-форму, если я не сериализую массивы в скрытом элементе и неэриализую их на стороне сервера, но это тоже сложный.

Вместо этого я сделал, когда был сделан вызов ajax, сервер сохраняет вывод в сеансе, затем он возвращает уникальный ключ для этого значения, другая страница на сервере будет просто эхо выводить, когда этот ключ предоставляется ему как вход,

Таким образом, пользователь нажимает на что-то, затем выполняется вызов ajax, затем сервер сохраняет это в сеансе, затем пользователь нажимает ссылку для загрузки, а затем сервер удаляет этот сеанс.

Это может быть не самое совершенное решение специально, так как пользователю нужно дважды щелкнуть, но для меня это кажется более стандартным.

@ user893730- Почему элементы помещаются в форму и представляют их «взломанными»? Кроме того, я не понимаю, почему сериализация и десериализация данных массива «сложна» – там есть миллиард библиотек, которые поддерживают именно такие вещи.