JQuery Excel проблема экспорта - PullRequest
1 голос
/ 27 марта 2012

У меня есть некоторые данные из JQGrid, которые должны быть экспортированы в Excel. Итак, мы написали Java-сервлет для записи данных в Excel и отправки их обратно. Со стороны клиента мы используем запрос AJAX JSONP, отправляя данные JSON. Я могу поразить сервлет и сервлет, отправив созданный Excel обратно клиенту. Но я не могу видеть Excel или какой-либо вывод со стороны клиента.

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

Вот мой заголовок результата, который я получил.

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Disposition: attachment; filename=PistonData.xls
Content-Type: application/vnd.ms-excel
Content-Length: 6144
Date: Tue, 27 Mar 2012 08:49:04 GMT

Как открыть этот результат как Excel, используя JQuery? Может кто-нибудь предложить мне способ решить эту проблему.

Обновление № 1 Забыли включить запрос

$.ajax({
        type: "POST",
        dataType: "jsonp",
        contentType:'application/vnd.ms-excel',
        url: "http://devmachine:9010/axis/SPSServlet",
        data: param,
        success: function (dataToSend) {
            alert(dataToSend);
        }
    });

Обновление № 2 По совету Олега я разработал решение этой проблемы.

Вот мой код:

    <form id="frmExcelExport" style="display:none;">
       <input type=hidden id="partId" name="partId" />
       <input type=hidden id="columnNames" name="columnNames" />
       <input type=hidden id="data" name="data" />
    </form> 

$('#columnNames').val(colModStr);
$('#partId').val(currentPartID);
$('#data').val(dataStr);

var urlForExport = "http://devmachine:9010/axis/SPSServlet";        
$('#frmExcelExport').attr("method", "post");
$('#frmExcelExport').attr("action", urlForExport); 
$('#frmExcelExport').submit();

и это работает очень хорошо. Огромное спасибо Олегу !!!!

Ответы [ 2 ]

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

Я думаю, что вы не можете открыть Excel, если используете HTTP POST.Способ, который будет работать, - использовать HTTP GET и кодировать параметры, которые вам нужны в URL:

window.location = "http://devmachine:9010/axis/StdPartSearchServlet?" +
    $.param({someParamName: "someValue", anotherParam: 123});

. Таким образом, веб-браузер откроет возвращенные данные как PistonData.xls, указанное в * 1007.* заголовок в отношении заявки, зарегистрированной для application/vnd.ms-excel (см. Content-Type заголовок).См. ответ для получения более подробной информации.

Если вам нужно предотвратить неконтролируемое кэширование данных XLS, возвращаемых с сервера, я бы порекомендовал вам установить дополнительный заголовок HTTP "Cache-Control: max-age=0" или лучше "Cache-Control: private, max-age=0" для предотвращения кэширования без повторной проверки на HTTP-прокси.См. здесь , здесь для получения дополнительной информации.

0 голосов
/ 27 марта 2012

Если вы пытаетесь использовать jquery для загрузки файла, возможно, вам следует поискать здесь:

http://www.filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads 1

У этого есть рабочий фрагмент, чтобы делать то, что вы хотите.

...