2014-07-24 38 views
0

我在django網站上使用reportlab來創建和返回PDF。到目前爲止,這僅限於一個「報告」頁面,但我試圖擴展它使用的位置。我創建了一個返回正確響應的ajax調用,但保存/查看PDF的對話框從不顯示,而是刷新頁面。我猜這是因爲我沒有ajax調用的成功函數,但我不確定它應該是什麼。PDF對AJAX的響應將不會顯示

JS:

function get_report(){ 
    $.ajax({ 
    url: '{{root_url}}/timecard/', 
    type: 'POST', 
    data: {'emp_id':employee_id}, 
    dataType: 'html', 
    }); 
} 

HTML:

<input id="id_report" type="submit" value="Print" onclick="get_report()"/> 

Django的:

def view_timecard(request): 
    if request.method == 'POST': 
     response = get_timecard_report(request) 
     return response 

功能get_timecard_report使用已有的功能來構建一個反應是,原來的頁面上,帶來了打開或保存PDF的對話框。使用調試器,返回的響應看起來與那些正常工作的響應相同。

我想我只需要在ajax成功中正確處理這個問題,但我不確定那會是什麼。

+0

我實在無法理解爲什麼你想在這裏AJAX的使用。你想按下一個按鈕並以PDF的形式得到響應:這正是正常的提交按鈕所要做的。 –

回答

0

看起來你正在做一個ajax調用,但沒有處理響應。 你說得對,失敗的成功功能。您只需填充HTML元素(您可以使用'frame'或'object'html標籤將pdf嵌入到html頁面中),並處理ajax錯誤。

ajax({ 
url: '{{root_url}}/timecard/', 
type: 'POST', 
data: {'emp_id':employee_id}, 
dataType: 'html', 
success: function(response){ 
    if (response) 
     <get document elementid and set the inner html as the PDF response using javascript> 
    }, 
error: function(xhr,status,error){ 

if xhr.readyState == 0 || xhr.status == 0 
    return; 
else 
alert("xhr status:" + xhr.status); alert("in get_report function") 
} 
}) 

順便說一句,您的視圖代碼在這裏不清楚,但您需要輸出PDF作爲附件。

類似這樣的: response ['Content-Disposition'] ='attachment;文件名=「somefilename.pdf」」

Output PDFs with django