我的问题是,我先发送给客户端PDF下载,然后需要检查数据库中是否存在某些数据,然后根据该检查,我需要显示一个问题,即用户是否要下载另一个生成的PDF。
我的代码:
//Here I just make dialog for question $('#printDWInfo').dialog({ resizable: false, modal: true, autoOpen: false }); //Here is my problem :) $('#generujWydruk').click(function (event) { event.preventDefault(); $('#printForm').submit(); // <-- sending first request and client get first PFD file $.post('<%: ResolveUrl("~/Reports/KPiRReportDWCheck") %>', <-- check for another data $("#printForm").serialize(), function(data) { if (data.length > 0) { $("#printDWInfo").dialog( "option", "buttons", [ { text: "Tak", click: function () { $.ajax({ type: "POST", url: '<%= Url.Action("PrintDWList","Reports")%>', datatype: "json", traditional: true, data:{'ids': data }, success: function (data2) { //I don't know what to do here } }); $(this).dialog("close"); } }, { text: "Nie", click: function () { $(this).dialog("close"); } } ]); $('#printDWInfo').dialog("open"); } } );
如果客户端单击对话框中的“ Tak”按钮,则使用ajax请求,因为我可以传递给int的控制数组,该数组由返回$.post('<%: ResolveUrl("~/Reports/KPiRReportDWCheck") %>'。在我的ajax请求的成功功能中,FireBug告诉我这data2是我的PDF文件的二进制数据,我该怎么做才能允许客户端下载该PDF文件?
$.post('<%: ResolveUrl("~/Reports/KPiRReportDWCheck") %>'
data2
在我的Ajax请求成功功能FireBug中,向我展示data2是我的PDF文件的二进制数据,我需要做些什么才能允许客户端下载该PDF文件?
您不应该使用AJAX下载文件。问题是您正在AJAX调用的成功回调中的javascript变量中获取pdf字节,但是您无能为力。您不能提示用户将其保存,当然也不能将其保存到客户端,因为javascript没有必要的特权。
因此,您应该使用正常的请求:
var downloadUrl = '<%= Url.Action("PrintDWList", "Reports")%>?' + $.param({ ids: data }, true); window.location.href = downloadUrl;
请注意,这会将GET请求发送给PrintDWList传递ids查询字符串参数的操作,因此请确保此操作可在GET上访问。现在,如果控制器操作使用Content- Disposition标头附加附件,它将为用户提供下载文件的方法:
PrintDWList
public ActionResult PrintDWList(int[] ids) { byte[] pdf = ... return File(pdf, "application/pdf", "file.pdf"); }