在我看来,这两行代码应该是一样的:
window.location = "../PlanView/ExportAsPDF";
$.ajax({
url: '../PlanView/ExportAsPDF',
data: { },
success: function (stream) { window.location = stream; }
});
前一段代码会触发用户的.PDF文件下载。第二个没有 - 我的浏览器的网络流量中有一个奇怪的请求。
有人可以突出我应该注意的关键差异吗?
更深入的解释:
我需要将更多数据传递到我的服务器,而不是URL中允许的数据。因此,我需要POST到服务器而不是GET。我不能使用以前的代码,因为我无法将那么多信息推送到URL中 - 服务器将以414响应。
我想用后者复制前一段代码的功能。
public ActionResult ExportAsPDF(string dataURL)
{
Document document = new Document(PageSize.A4.Rotate(), 15, 15, 30, 65);
byte[] buffer = new byte[0];
using (MemoryStream memoryStream = new MemoryStream())
{
PdfWriter.GetInstance(document, memoryStream);
document.Open();
document.Add(new Paragraph("First PDF file"));
document.Close();
buffer = memoryStream.ToArray();
}
return File(buffer, "application/pdf", "PlanView.pdf");
}
答案 0 :(得分:1)
第一个与第二个不同,因为第一个告诉浏览器显示文件而第二个不显示。仅仅因为“stream”不会是“../ PlanView / ExportAsPDF”。
如果您只想将浏览器定向到该文件,也不需要此ajax请求。如果它在所有的工作,后者也会给你什么 - PDF文件的二进制内容?坦率地说,我不知道如何处理:)
如果你希望得到JSON(当然你不会得到),你的ajax属性中也应该有“dataType”而不是“datatype”。
更新:
即使这应该有效:
$.ajax({
url: '../PlanView/ExportAsPDF',
method : 'POST',
data: { },
dataType: 'json',
success: function (stream) { window.location = '../PlanView/ExportAsPDF'; }
});