2012-01-16 36 views
0

我有一個動態生成excel電子表格的應用程序,這意味着它不會保存爲服務器中的文件,我設置內容類型和其他標題,所以它工作正常,我的問題是否可以使用jquery觸發下載。這裏是什麼樣子:使用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() 

這將返回數據,所以當我去我的瀏覽器的網址時,會觸發下載,但是,我需要發佈一些數據,這將是,如果一切美好的事物可以用jquery來處理。這是我迄今爲止jQuery的身邊,我知道都是錯的:

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

回答

1

而不是使用jQuery爲此,請嘗試更改get_xl方法接受查詢字符串參數,然後使用純ol'javascript - 這將觸發瀏覽器中的保存/運行下載對話框中的URL設置爲/get_xl?params_here

例如

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

window.location.href = '/get_xl?' + fields; 
+0

我用這種方法,謝謝。 – 2012-01-17 18:42:35

0

可以通過插入一個表單元素,並附加您要發佈或進入隱藏字段中的數據,並觸發做到這一點提交活動。

您正在發送的標題將啓動下載,併發送Content-Length,以便正確顯示下載進度。

+0

好吧,我剛纔設置的長度,同樣的事情發生:(我可以看到螢火蟲的響應,它響應好,但它不會觸發下載。 – 2012-01-17 00:09:09

+0

有你想這樣做,使用jQuery的任何原因而不是隻是將形式指向get_xl? – Callum 2012-01-17 00:13:41

+0

我有一個做大查詢的api,表單有2個按鈕,一個發佈表單並使用ajax返回數據,另一個按鈕用於使用相同的參數下載excel文件,它可以在沒有jquery的情況下完成,但是能夠使用它會很好。 – 2012-01-17 00:20:43

0

我可能會在這裏找到一些方法,但我會嘗試使用.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頁面做過這些。當您發佈到頁面時,它應該調用頁面並開始下載文件。如果這不起作用,您可以嘗試在頁面上使用ajax調用返回的內容填充iframe。這可以通過成功:函數和.load來完成。也許值得嘗試一下。