次の問題について教えていただけますか?
パラメータを選択して、ブラウザによって開かれるStruts1.xアクションによって返されるPDFレポートを生成するフォームがあります。これは、システムで完全に同期して機能しています。
しかし、ユーザーからシステムを保護するために必要なのは、レポートが生成されたときにのみ有効になるようにボタンをロックして、常に実行せずにレポートを要求することです。
私の選択は、このレポートが生成されたAJAX(非同期呼び出し)で関数を作成することでした。このプロセスでは応答がありませんが、ボタンを非表示にして「読み込み中」を表示し、戻るボタンを表示して非表示にします。 「読み込み中」。
しかし、私は2つの異なる試験で問題を抱えています。
ボタンのjQuery動作とロードを使用した最初の試行(コード1)では、ロードが期待されますが、以下の関数(データ)を返す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回目の試行(コード2)ではPDFファイルが返されますが、ブラウザのダウンロードウィンドウが開くと、ボタンを再度有効にして画像の読み込みを無効にするために制御が失われます。
DIVの制御にjQueryまたはDojoを使用してこのPDFファイルを開く方法はありますか?
ありがとうございました、
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){
});
});
}