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