window.location = MVC File()和$ .ajax的成功(window.location = result)之间的差异?

时间:2012-03-09 00:48:37

标签: javascript ajax window.location

在我看来,这两行代码应该是一样的:

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");
}

1 个答案:

答案 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'; }
});