2012-05-14 48 views
1

我想要一個Django創建的表單爲jQuery/Ajax提交;如果成功,我想要下載一個文件,並且如果表單無效,我希望返回我的Django表單。Django jQuery Ajax表單:下載文件或渲染錯誤的表格

我試圖 「劫持」 Django的形式一樣,把它變成一個jQuery/Ajax的事情: (javascript代碼)

form.submit(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     data: form.serialize(), // form data 
     type: form.attr('method'), 
     url: form.attr('action'), 
     success: function(data, textStatus, jqXHR) { 
      var ctype = jqXHR.getResponseHeader('Content-Type'); 
      if (ctype == 'text/html') { 
       $('#div_where_my_form_is').html(data); 
      } 
      else if (ctype == 'text/csv') { 
       // ???? my problem is here 
      } 
     } 
    }); 
}); 

我的Django視圖代碼是這樣的:

# (if the form is invalid I return it (simple template containing only the form)) 
# if valid: 
response = HttpResponse(mimetype='text/csv') 
response['Content-Disposition'] = 'attachment; filename=filename.csv' 
writer = csv.writer(response, delimiter=';') 
writer.writerow(['...stuff written here...']) 
return response 

所以我的文件是一個即時創建的CSV文件,這可能是重要的注意事項。

看看我的jQuery代碼如何使用jqXHR對象來檢查返回的內容類型(任何更好的方法都是歡迎的)。我的問題是,如果成功,我不能讓jQuery明白這是一個正在返回的文件,應該下載。那可能嗎? jQuery只是將數據視爲文本。

可能的解決方法:

  • 使第一AJAX調用來檢查的形式,如果它是確定做一個「正常」(非Ajax)調用下載文件
  • 忘了阿賈克斯,並在無效形式的情況下,返回錯誤頁面

回答