你能帮我解决以下问题吗?
我有一个表单,您可以在其中选择参数以生成 PDF 报告,该报告将由浏览器打开的 Struts 1.x 操作返回。这在系统中完美地同步工作。
但是我需要保护系统免受用户的影响是请求报告而没有一直做,只在生成报告后才启用按钮。
我的选择是在生成此报告的 AJAX(异步调用)中创建一个函数,虽然此过程没有回复我,但我隐藏了按钮并显示“正在加载”,返回按钮也显示并隐藏了“加载”。
但是我在两个不同的试验中遇到了问题:
在第一次尝试(代码 1)中,按钮的 jQuery 行为和加载是预期的,但我返回以下函数(数据)的 PDF 文件未在浏览器下载窗口中打开:
...
success: function (data) {
WinID var = window.open ('', 'newwin', 'width = 400, height = 500');
WinId.document.open ();
WinId.document.write (data);
WinId.document.close ();
...
在使用 Dojo 的第二次尝试(代码 2)中,预期会返回 PDF 文件,但是当浏览器的下载窗口打开时会失去控制,以便再次启用按钮并禁用图像加载。
有什么方法可以使用 jQuery 或 Dojo 打开这个 PDF 文件来控制我的 DIV?
谢谢,
HTML 片段:
...
<tr>
<td colspan="3" align="center" valign="middle">
<div id="button">
<a href="javascript:execute();">
<img src="images/btnExecute.png" alt="Execute" border="0" class="inputImage" />
</a>
</div>
<div id="loadingImage">
<img src='images/loading.gif' style="{align:right;}" />
</div>
</td>
</tr>
...
代码 1 (jQuery):
function execute()
{
$.ajax({
type:"GET",
url: "generateReport.do",
data: "action=print¶m1=param1",
dataType: "html",
beforeSend : function() {
//It works
$('#button').hide();
$('#loadingImage').show();
},
complete : function() {
$('#button').show();
$('#loadingImage').hide();
},
success : function(data) {
var WinId = window.open('', 'newwin', 'width=400,height=500');
WinId.document.open();
WinId.document.write(data);
WinId.document.close();
}
});
}
代码 2(道场):
function execute()
{
//It works
$('#button').hide();
$('#loadingImage').show();
var url = "generateReport.do?action=print¶m1=param1";
require(["dojo/io/iframe"], function(ioIframe){
ioIframe.send({
url: url,
handleAs: "html"
}).then(function(data){
//It only works when my page returns the html message "Empty report"
$('#button').show();
$('#loadingImage').hide();
}, function(err){
});
});
}