Загрузите динамически сгенерированный контент, используя jquery - PullRequest
0 голосов
/ 17 января 2012

У меня есть приложение в TurboGears, которое динамически генерирует электронную таблицу Excel, что означает, что она не сохраняется в виде файла на сервере, я установил тип содержимого и другие заголовки, поэтому он работает нормально, мой вопрос: возможно ливызвать загрузку с помощью jquery.Вот как это выглядит:

def get_xl(self, **search):
    response.headers['Content-type'] = "application/ms-excel"
    response.headers['Content-Disposition'] = "attachment;filename=myfile.xls"
    book = Workbook()
    ... code that puts stuff in rows ...
    return book.biff_data()

Это возвращает данные, поэтому, когда я захожу на URL в моем браузере, он запускает загрузку, однако мне нужно опубликовать некоторые данные, и было бы неплохоесли все можно обработать с помощью jquery.Это то, что я до сих пор на стороне jquery, я знаю, что все неправильно, хотя:

var fields = $('#search-form').serializeObject();
    if ( !fields.length ) {
        alert("Dude, you must search for something.");
        return false;
    }
$.get('/get_xl',fields.data);

Ответы [ 3 ]

1 голос
/ 17 января 2012

Вместо того, чтобы использовать для этого jQuery, попробуйте изменить метод get_xl, чтобы он принимал параметры строки запроса, а затем просто установите URL-адрес на /get_xl?params_here, используя обычный ol 'javascript - это вызовет диалог загрузки Сохранить / Выполнить вбраузер.

например

var fields = $.param('#search-form');
    if ( !fields.length ) {
        alert("Dude, you must search for something.");
        return false;
    }

window.location.href = '/get_xl?' + fields;
0 голосов
/ 17 января 2012

Я могу быть далеко от базы, но я постараюсь опубликовать форму через ajax с помощью функции .ajax () и получить данные обратно со страницы, которую вы вызываете.

$.post('your-excel-gen-page.py', $('#search-form').serialize(),
        function(data){
            if(data.success == true){
                              // Update iframe using .load() function
            }else{
              // Fail
            }
        }, "json");

Я не профи Python, но я делал это с PDF-генерированием и php-страницами в прошлом. Когда вы публикуете страницу, она должна зайти на страницу и начать загрузку файла. Если это не сработает, вы можете попробовать заполнить iframe на своей странице содержимым, возвращаемым из вызова ajax. Это может быть сделано с успехом: функция и .load. Может стоит попробовать.

0 голосов
/ 17 января 2012

Вы можете сделать это, вставив элемент формы и добавив данные, которые вы хотите POST или GET, в скрытые поля и запустив событие submit.

Отправляемые вами заголовки начнут загрузку, отправят содержимое-Длина слишком, чтобы прогресс загрузки отображался правильно.

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