Используйте jQuery для отправки данных Excel с использованием AJAX - PullRequest
31 голосов
/ 29 сентября 2008

У меня есть следующая функция, которая извлекает данные из базы данных. Ajax-вызов работает правильно. Как я могу отправить данные с разделителями табуляции в моей функции успеха пользователю? Установка типа контекста "application / vnd.ms-excel" не сработала. В уведомлении об успехе отображаются правильно отформатированные данные.

     function SendToExcel() {
       $.ajax({
           type: "GET",
           url: "/Search.aspx",
           contentType: "application/vnd.ms-excel",
           dataType: "text",
           data: "{id: '" + "asdf" + "'}",
           success: function(data) {
              alert(data);
           },
           error: function (jqXHR, textStatus, errorThrown) {
              alert(jqXHR.responseText);
       }});
     }

Я не хочу отображать данные в браузере - я хочу отправить их в Excel.

РЕДАКТИРОВАТЬ: Я нашел способ сделать то, что я хотел. Вместо того, чтобы перенаправлять пользователей на новую страницу, которая предложит им сохранить / открыть файл Excel, я открыл страницу внутри скрытого фрейма. Таким образом, пользователи нажимают кнопку, и им предлагается сохранить / открыть файл Excel. Нет перенаправления страниц. Это Аякс? Нет, но это решает реальную проблему, с которой я столкнулся.

Вот функция, которую я вызываю по нажатию кнопки:

     function SendToExcel() {
        var dataString = 'type=excel' +
            '&Number=' + $('#txtNumber').val() + 
            '&Reference=' + $('#txtReference').val()

        $("#sltCTPick option").each(function (i) {
             dataString = dataString + '&Columns=' + this.value;
        });

        top.iExcelHelper.location.href = "/Reports/JobSearchResults.aspx?" + dataString;;
     }

Ответы [ 4 ]

13 голосов
/ 29 сентября 2008

AJAX - это неправильный выбор. Перенаправьте пользователя на ресурс сервера, который отправит данные с правильным типом MIME, и пусть браузер выяснит, что с ним делать.

5 голосов
/ 16 декабря 2010

в HTML У меня есть форма с элементами последовательного ввода и кнопкой, которая вызывает функцию JavaScript onclick="exportExcel();


затем в файле JavaScript:
function exportExcel(){
    var inputs = $("#myForm").serialize();
    var url = '/ajaxresponse.php?select=exportExcel&'+inputs;
    location.href = url;
}

и, наконец, сводный файл, который отвечает на что-то

PHP код:

case 'exportExcel':{
                     ob_end_clean();
                     header("Content-type: application/vnd.ms-excel");
                     header("Content-Disposition: attachment;
                     filename=exportFile.xls");
                     echo $html->List($bd->ResultSet($_GET));
                }

$ html - это объект, который обрабатывает html, а $ bd - это объект, который возвращает данные из базы данных. отправьте свою собственную таблицу HTML или что вы хотите.

2 голосов
/ 29 сентября 2008

Поскольку он использует JavaScript, AJAX связан с разработанными в JavaScript ограничениями, которые включают взаимодействие с другими процессами на компьютере клиента. В этом случае это хорошая вещь; вы не хотите, чтобы сайт мог автоматически загружать документ Excel с вредоносным макросом.

Если вы хотите отобразить данные в браузере, вы можете использовать AJAX; в противном случае вам нужно будет просто дать ссылку на документ Excel и позволить браузеру в обычном режиме обработки загрузки выяснить, что делать.

0 голосов
/ 30 сентября 2008

Возможно, вы не хотите делать это с помощью JavaScript.

Я думаю, вы хотите создать страницу ответа с типом шахты application / csv , а затем перенаправить пользователя на эту страницу. Я бы, вероятно, сделал window.open (), так как пользователь не теряет страницу, на которой он сейчас находится.

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