У меня есть php-скрипт, который ждет аякс-звонков в
www.mydomain.com/file.php
Вызов ajax содержит некоторые переменные, которые файл.php будет использовать для генерации некоторых результатов csv,
Возможно ли, что пользователь сможет загрузить содержимое csv, созданное файлом file.php, не сохраняя его где-нибудь на сервере и прочее?
Я не хочу перенаправлять пользователя на любую другую страницу, я хочу, чтобы они нажимали кнопку, затем смотрели диалоговое окно загрузки и позволяли загружать файл csv.
Конечно, в файле PHP перед тем, как вы вывести что-либо, установите тип содержимого на что-то, что браузер загрузит:
header("Content-Type: application/octet-stream");
Кроме того, это хорошая практика, чтобы включить тоже (и позволяет предложить имя файла):
header("Content-Disposition: attachment; filename=somefile.csv;");
В зависимости от браузера иногда требуется только более поздняя версия, но я обычно использую оба, чтобы убедиться.
Ввод элементов в форму и представление их просто кажется взломанным, и я не чувствую себя комфортно, используя его.
Когда вы используете эти типы вещей, я думаю, что вы немного рискуете, следующие версии браузеров могут просто не поддерживать их.
Кроме того, я передаю сложные массивы в качестве параметров в моем вызове ajax на сервер, и их нелегко преобразовать в html-форму, если я не сериализую массивы в скрытом элементе и неэриализую их на стороне сервера, но это тоже сложный.
Вместо этого я сделал, когда был сделан вызов ajax, сервер сохраняет вывод в сеансе, затем он возвращает уникальный ключ для этого значения, другая страница на сервере будет просто эхо выводить, когда этот ключ предоставляется ему как вход,
Таким образом, пользователь нажимает на что-то, затем выполняется вызов ajax, затем сервер сохраняет это в сеансе, затем пользователь нажимает ссылку для загрузки, а затем сервер удаляет этот сеанс.
Это может быть не самое совершенное решение специально, так как пользователю нужно дважды щелкнуть, но для меня это кажется более стандартным.
@ user893730- Почему элементы помещаются в форму и представляют их «взломанными»? Кроме того, я не понимаю, почему сериализация и десериализация данных массива «сложна» – там есть миллиард библиотек, которые поддерживают именно такие вещи.