Загрузка PHP-файла с использованием POST-данных через jQuery AJAX

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

Я построение экспортера XLS в PHP и jQuery. Я пытаюсь POST-массив с jQuery (который, я считаю, будет слишком длинным, как строка запроса GET), и использую его для создания файла XLS на моем сервере, который пользователь затем может загрузить.

Я использовал скрытые iframes в прошлом, чтобы выполнить это, но так как они просто перенаправляют на URL, это требует от меня использования GET, что заставляет меня нервничать.

Тогда у меня вопрос: как мне сохранить эти файлы на моем сервере и связать их, если они генерируются динамически, возможно, несколькими пользователями? Будет ли скрытая ссылка iframe на отдельный PHP-скрипт, который находит файл THEIR на основе идентификатора сеанса или что-то в этом роде?

Заранее благодарен за любые рекомендации по поводу того, что, я уверен, постоянно спрашивают:)

8
задан Community 23 May 2017 в 10:33
поделиться

2 ответа

Можно выполнить POST в скрытый iframe. Поэтому вам не нужно беспокоиться о длине строки запроса; вы опубликуете пары ключ/значение, которые сгенерируют ваш XLS-файл и впоследствии принудительно загрузят файл в браузер.

<form method="post" action="/download/xls" target="download_xls"> 
  <fieldset>
    <label>Key 1:</label>
    <input type="text" name="key_1" />
  </fieldset>

  <fieldset>
    <label>Key 2:</label>
    <input type="text" name="key_2" />
  </fieldset>

    <fieldset>
            <input type="submit" value="Submit" /> 
    </fieldset> 
</form>

<iframe id="download_xls" name="download_xls" width="0" height="0" scrolling="no" frameborder="0"></iframe>

ОБНОВЛЕНИЕ Быстрый поиск в Google выдал эту статью: http://particletree.com/notebook/ajax-file-download-or-not/

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

9
ответ дан 5 December 2019 в 12:06
поделиться

Кажется, это должно быть довольно просто, но все зависит от того, куда вы помещаете создаваемые XLS-файлы. Если вы предполагаете, что ответ на сообщение должен быть диалоговым окном «Сохранить файл», то есть самим файлом, тогда все, что вам нужно сделать, это убедиться, что заголовок «Content-Disposition» установите «вложение», а затем выполните потоковую передачу содержимого файла.

Если вы собираетесь сгенерировать файл и сохранить его, вам придется хранить его где-то с идентификатором.В этом случае вы бы просто ответили обычной страницей со ссылкой «скачать», так что эта ссылка включает идентификатор файла. Это может вызвать либо GET, либо POST, и сервер ответит на это примерно так, как я описал выше.

На мой взгляд, скрытый