2

私は現在、ユーザーが一連のオプションを選択し、[送信]をクリックすると、送信を処理するページで一連のカンマ区切りファイルが作成され、それらが圧縮されてクライアントに返送されるプロジェクトに取り組んでいます。

一部を除いて、私はこれのほとんどがうまく機能しています。ユーザーが一連のオプションを選択し、フォーム送信を介してすべてのファイル作成を処理するASPページを呼び出すページ。ユーザーが送信を押すと、進行状況バーが表示され、ページが機能していることがわかります。

私が遭遇している問題はResponse.Redirect、スクリプトの最後にを置くと、ファイルがブラウザに送信されないことです。スクリプトの最後にaを付けないResponse.Redirectと、呼び出し元のページは再読み込みされず、そのまま機能しているように表示されます。

jQueryとAJAXでこれを試してみましたが、どちらも機能しません。

いくつかのコード...

基準選択ページ

<form method="post" action="../../scripts/generate-presentation-data.asp" onsubmit="return submitform();">
...form items...
</form>

<script>
function submitform()
{
if ( confirm('Generate presentation data?') )
{ return true; }
else { return false; }
}
</script>

そして呼び出されたページ:

Response.Buffer = True

...create files, zip them up etc...

Response.AddHeader "Content-Disposition", "attachment;filename=" & Chr(34) & "board-presentation-data.zip" & Chr(34)
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile(sFilePath & "board-presentation-data.zip")
Response.BinaryWrite(objStream.Read)

この最後にリダイレクトを設定すると、ファイルがブラウザに送信されることはありません。

このようなものを適切に機能させる方法はありますか?

ありがとう。

4

1 に答える 1

1

ASPコードに2つの応答を要求しています。1つはzipファイルで、もう1つはリダイレクト命令です。リクエストは、リダイレクト命令またはzipファイルのいずれか1つの応答のみを持つことができます。

アプローチ1

生成されたzipファイルをWebの特別なサブフォルダーに保存します。ランダムなGUIDを使用してさらにサブフォルダーを作成し、生成されたZipファイルをそこに配置します。応答でZipファイルを送信しようとせず、単にリダイレクトに送信しようとします。

リダイレクト先のURLで、作成されたzipファイルのURLをクエリ文字列にエンコードします。

リダイレクトされたページは、HTMLに、Zipをダウンロードするためにここをクリックするようにユーザーに求めるリンクを生成します。リンクのURLはzipファイルのURLになります。Javascriptを使用してLoadイベントでファイルに移動したり、更新METAタグやその他のトリックを使用してファイルを自動的にダウンロードしたりできますが、これらのアプローチが失敗した場合はフォールバックが必要になります。

アプローチ2

AJAXを使用して、ZipファイルをフェッチできるURLを返すページにデータを投稿します。このページは、投稿されたデータをセッションに保存するか、上記のようにzipファイルを生成します。返されるURLは、セッションに保存されているデータからzipを生成するページへのURLか、zip自体へのURLのいずれかになります。

投稿がページ内のコードを返すと、新しいウィンドウで戻りURLを開くことができ、最終的なURLに移動できます。

于 2012-08-10T15:46:57.643 に答える