IE 11打开旧的覆盖PDF而不是新的PDF?

时间:2014-06-06 13:34:22

标签: c# javascript jquery ajax internet-explorer

编辑:

我在Internet Explorer中编辑了此设置。互联网选项 - >一般(标签) - >设置(按钮) - >临时互联网文件(标签) - >选择“每次我访问此页面”。它现在每次加载正确的PDF,但它对我的用户没有帮助。我也尝试在JQuery中为我的ajax调用添加cache:false


以下代码在Firefox和Chrome中运行良好。每次浏览时都会将新PDF打开到新选项卡中。不幸的是,Internet Explorer会提示打开或保存PDF,选择打开后会显示旧的0.pdf,而不是刚创建的.pdf。如果您选择保存PDF然后从桌面打开它,它将覆盖没有问题。 (注意:打开仍然是第一次为每个用户会话工作,但每次之后,直到注销它将显示当您选择打开而不是保存时生成的第一个PDF)

那么有没有办法让Internet Explorer认识到PDF已被覆盖在服务器上并打开新的PDF而不是旧的PDF?


c#代码,用于生成与以前的PDF文件名相同的新PDF,以便覆盖以前生成的PDF。

//...get data for variables

string path = System.Web.Hosting.HostingEnvironment.MapPath(@"~\DesktopModules\DataManagement\Pdf\" + 0 + ".pdf");

creator.PrintLabels(labels, new labelFormat(), path, startingLabelPosition);

string relativePath = @"\DesktopModules\DataManagement\Pdf\" + 0 + ".pdf";

return relativePath;

我也使用这个jquery / ajax代码将新创建的PDF打开到一个新窗口。

$.ajax({
    type: "POST",
    url: "DesktopModules/DataManagement/TestService.svc/CreateLabelPdf",
    data: JSON.stringify(labelInfo),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data) {
        window.open(data.d);
    },
    error:  function(msg) {
        alert("Error: " + msg.status);
    }
});

3 个答案:

答案 0 :(得分:0)

当你的请求字符串(特别是没有参数的字符串)没有改变时,可能会发生这种情况。 您可以将每次更改的虚拟参数(如当前时间戳)附加到您的URL中。

例如:

  url: "DesktopModules/DataManagement/TestService.svc/CreateLabelPdf?dummy="+currentTimeStamp,

答案 1 :(得分:0)

哪些方法与Danyu建议的内容非常接近。

事实证明,IE并没有缓存请求,而是缓存实际的PDF,这样每次尝试加载0.pdf时,它都会找到它之前找到并加载的那个。因此,我不得不将请求更改为服务器,而是必须将Web浏览器所采用的文件路径更改为该文件。我通过附加查询字符串来完成此操作。

所以我必须初始化var math = Math.random();,然后将+"?identification="+math添加到window.open(data.d)

最终守则:

var math = Math.random();

$.ajax({
    type: "POST",
    url: "DesktopModules/DataManagement/TestService.svc/CreateLabelPdf",
    data: JSON.stringify(labelInfo),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data) {
        window.open(data.d+"?identification="+math);
    },
    error:  function(msg) {
        alert("Error: " + msg.status);
    }
});

答案 2 :(得分:0)

您也可以将htaccess文件修改为

<IfModule mod_expires.c>
  # Enable expirations.
  ExpiresActive On

<FilesMatch ".(pdf)$">
  Header set Cache-Control "max-age=0"
</FilesMatch>

</IfModule>