次の HTML のチャンクを使用して、アクティブ化されたときに処理してファイルに出力したい対象のデータを含む (非表示の) フォームを表します。
<form id="output_form" action="exportData.pl" method="POST" target="_blank" style="display:none;">
<input type="text" id="output_form_data" name="output_data" style="">
<input type="text" id="output_form_filename" name="output_filename" style="">
</form>
このフォームを送信すると、データが に送信され、変数 で指定されたファイル名にデータがexportData.pl
出力されます。output_data
output_filename
非常に大まかに:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $val = param('output_data');
my $fn = param('output_filename');
print "Content-Type: text/plain\n";
print "Content-Disposition: attachment; filename=$fn\n";
print "Content-Description: File to download\n\n";
print "$val\r\n";
私がやりたいのは、このフォームを送信するときに、1 つだけでなく 2 つのファイルをエクスポートすることです。2 番目のファイルは別のスクリプトで処理されるため、出力が変更されます。
私がこれまでに試したこと:
2 つの隠しフォームを設定します。
<form id="output_form_1" action="exportData_1.pl" method="POST" target="_blank" style="display:none;">
<input type="text" id="output_form_data_1" name="output_data" style="">
<input type="text" id="output_form_filename_1" name="output_filename" style="">
</form>
<form id="output_form_2" action="exportData_2.pl" method="POST" target="_blank" style="display:none;">
<input type="text" id="output_form_data_2" name="output_data" style="">
<input type="text" id="output_form_filename_2" name="output_filename" style="">
</form>
ボタンをクリックすると、jQuery を使用して、両方のフォームExportData()
で実行される JavaScript 関数を起動します。submit()
function ExportData()
{
var rawTxt = document.getElementById("results_map").innerHTML;
var fn_1 = exportFilename(".1.tsv");
$('#output_form_data_1').val(rawTxt);
$('#output_form_filename_1').val(fn_1);
$('#output_form_1').submit();
var fn_2 = exportFilename(".2.tsv");
$('#output_form_data_2').val(rawTxt);
$('#output_form_filename_2').val(fn_2);
$('#output_form_2').submit();
};
ただし、submit()
フォームでのみ呼び出されoutput_form_1
ます。2 番目の形式では何も起こりませんoutput_form_2
。
2 つの非表示のフォームを送信して、2 つの異なるファイルを印刷するにはどうすればよいですか? それができない場合、他の方法でこれを行うにはどうすればよいですか? (クライアント側のトリックを使用する場合、Flash や Java を使用できないことに注意してください。また、IE ユーザーをサポートできる必要があります。)