内容有内容处理附件时如何实现窗口加载回调?

时间:2014-10-13 13:39:51

标签: javascript jquery html 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;
    }
}

...然后一次只会处理一个请求,但onload回调仅在返回内容为HTML时才有效。如果它是我的附件,则DOC_REQUEST_PENDING变量永远不会设置为false,因此不能再进行任何请求。

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

1 个答案:

答案 0 :(得分:1)

@Cory上述评论中与之相关的问题似乎与我的问题重复,虽然我确信接受的答案完全正确,但有一点涉及它。在列表中有一个问题的另一个答案,它提供了一个指向这个jquery插件的链接:

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

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