Можно ли сделать Ajax-вызов и получить заголовки возврата PHP? - PullRequest
0 голосов
/ 09 марта 2012

У меня есть скрипт PHP, который создает файл экспорта .CSV из БД MySQL.Базовый скрипт форматирует вывод и использует header() для открытия всплывающего окна в браузере для загрузки .CSV.- Протестировано и работает нормально.

У меня также есть веб-страница с графической кнопкой, которая запускает Ajax-вызов на сервер для создания файла загрузки .CSV при нажатии графической кнопки.

Я протестировал событие click с помощью JavaScript alert(), и оно отлично работает.

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

Кто-нибудь делал что-то подобное раньше?

Спасибо.

* HMTL (выдержка) *

<div id="exportButton"><img src="images/export.png" alt="Export to Microsoft Excel Graphic" /></div>
<h2>Page Title</h2>
<br clear="all" />
<div id="pageContent_wrapper">...

* JavaScript *

    <script>
        jQuery.support.cors = true; // needed for ajax to work in certain older browsers and 

versions

    $(document).ready(function(){

        $('#exportButton').click(function() {
            //alert('button clicked');
            $.ajax({
                url: "http://mydomain.com/js/ajax/exportCSV.php"
            });
        });

    }); // end .ready()
    </script>

Я пытаюсь выполнить эту функцию, не отправляя пользователя обратно на сервер.Я хочу, чтобы пользователь остался на странице.

Ответы [ 2 ]

3 голосов
/ 09 марта 2012

Вы не можете выполнить загрузку по вызову AJAX. Самое простое решение - обернуть кнопку в элемент <a> и позволить браузеру обработать загрузку естественным образом. Если вам действительно нужно задействовать JS, измените document.location, чтобы он указывал на загружаемый PHP, вместо вызова AJAX.

1 голос
/ 09 марта 2012

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

header('Content-disposition: attachment; filename=huge_document.pdf');
header('Content-type: application/pdf');
readfile('huge_document.pdf');

Источник: http://webdesign.about.com/od/php/ht/force_download.htm

Используя этот метод, вы можете напрямую связываться со скриптом PHP и избегать вызовов JS.Обратите внимание, что принудительное использование Content-type PDF приведет к загрузке в некоторых браузерах, а в некоторых браузерах откроется плагин PDF Viewer.

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