我有一个控制器(Spring-MVC),可以根据get请求生成PDF报告。控制器设置标题,如“application / OCTET-STREAM”,“Content-Disposition”,“attachment; filename = \”“+ filename +”\“”,以便用户获得强制保存/打开对话框。控制器生成pdf并将pdf字节直接写入响应的输出流。返回的ModelAndView为null。
问题是我需要/想要在单击后禁用生成报告请求的按钮,然后在报告完成后重新启用它以防止双击。
我以为我可以使用prototype.org的Ajax.Request来做到这一点......这段代码确实可以正常工作,但后来因为客户端永远不会得到pdf而被卡住了。我猜我需要对回应做些什么,但我不知道是什么。任何想法/帮助表示赞赏。
function displayPdf(button_b, pdf_url) {
button_b.disabled = true;
new Ajax.Request(pdf_url, {
asynchronous:true,
evalScripts:true,
method:'get',
onComplete: function(response) {
button_b.disabled = false;
},
onFailure: function() {
redAlert('crap');
}
});
}
答案 0 :(得分:0)
我的猜测是你只想防止双击按钮。为什么不单独使用setTimeout
启用按钮几秒钟呢?
所以在你的desplayPdf函数开始时,你可能会把:
setTimeout("button-b.disabled = false",4000);
这将在单击按钮后禁用按钮4秒,然后启用它。
答案 1 :(得分:0)
我能想到的最好的方法来实现你想要的一切,假设你还在强迫下载,我想是这样的:
<html>
<head>
<script>
function get_it() {
document.getElementById('the_button').disabled = true;
document.getElementById('the_frame').src = "http://www.ca3.uscourts.gov/opinarch/063575p.pdf";
}
function enable_button() {
document.getElementById('the_button').disabled = false;
}
</script>
</head>
<body>
<iframe id='the_frame' onload='enable_button()'></iframe>
<button id='the_button' onclick='get_it()'>Get it</button>
</body>
</html>
基本上,您告诉它将其发送到iframe而不是使用AJAX请求。一旦pdf准备就绪,iframe的onload事件将触发,重新启用按钮。您可能希望为此使用实际的事件侦听器,而不是我在示例中使用的已弃用的内联侦听器:P