如何在内容具有content-Disposition附件时实现窗口加载回调



我很难找到一个问题的解决方案,我认为这个问题很常见,或者可以直接解决,但显然我错了。

我必须重写一些导致问题的网络代码(我没有写)。当用户单击链接时,会向web服务器发送请求,然后web服务器从某处获取或创建PDF文档。返回PDF数据时,Content-Disposition标头设置为attachment,浏览器显示"另存为"对话框。

之所以显示另存为对话框,是因为当用户单击链接时,Javascript会将window.location.href设置为服务器URL(带有一些参数)。

在处理请求时,除了浏览器在选项卡等中显示的动画外,没有其他加载动画。

问题是,如果一个请求挂起或花了一段时间,用户往往会再次单击该链接(可能多次),这意味着对同一资源的请求只会在服务器上不断增加(即使是意外双击链接(这很常见),也会导致两个请求被处理)。

我该如何防止这种情况发生?如果我这样做(window.location.href替换为window.open:

var REQUEST_PENDING = false;
function getPDF(param1, param2) {
    if (REQUEST_PENDING) return;
    REQUEST_PENDING = true;
    var w = window.open("/GetPdf.servlet?param1="+param1+"&param2="+param2);
    w.onload = function() {
        DOC_REQUEST_PENDING = false;
    }
}

那么在任何时候都只处理一个请求,但是只有当返回内容是HTML时,onload回调才有效。当它是一个附件时(这就是我所拥有的),DOC_REQUEST_PENDING变量永远不会设置回false,因此无法进行进一步的请求。

我知道最终的解决方案可能应该在服务器端实现,但不可能实现我在客户端尝试做的事情吗?(我可以使用jQuery)。

@Cory在上面的评论中链接到的问题似乎与我的问题重复,虽然我确信接受的答案非常好,但其中也有一些问题。列表中有另一个问题的答案,它提供了指向这个jquery插件的链接:

http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/

无论如何,对我来说,这是最终的解决方案。易于使用,效果极佳。

相关内容

  • 没有找到相关文章

最新更新