クライアント側にダウンロードボタンがあります。 ボタンがクリックされた後、ダウンロードを開始するために、いくつかのヘッダがPHPでサーバに設定されます。ヘッダーを設定した後に文字列をクライアントに返す方法
//code snippet:
$filename = basename($datei);
$size = filesize($datei);
$this->response->setHeader('Content-Type', "application/force-download", TRUE);
$this->response->setHeader('Content-Disposition', 'attachment; filename='.$filename , TRUE);
$this->response->setHeader('Content-Length', $size, TRUE);
return "TEST"; //<--code will never go this far, it is ignored
ダウンロードが機能します。しかし、私は応答として返されるものは得られませんが、ヘッダーです。 どうすれば返品できますか?ダウンロードが開始された後の文字列?
ヘッダーを設定した後にクライアントに何かを返すことは不可能なようです。
背景
基本的に私の目標は、例えば、スピナーアイコンを表示し、非表示にしましたファイルがまだダウンロードされている間にダウンロードボタンの中にスピナーアイコンを表示し、ダウンロードが終了した後で再び非表示にします。そのため、ダウンロードが完了したかどうかを知るためには、サーバーからクライアントに何かを返すだけで、クライアントに知らせることができます。 "ダウンロードに成功しました"。
しかし、これがうまくいくかどうかわからない場合は、ダウンロードが完了する前に応答が到着している可能性があります。
この質問を読んでいる人なら、私は様々な編集や悪い言い方で混乱しています。 - ヘッダーを設定した後に文字列を返すことができます。 ( "echo"を使用し、コードで "return"を使用しないでください)。 - 1つのダウンロードファイルと別の文字列の両方を送信し、JSプロセスで処理することができます。 (例はコメントには長すぎます;注意点もあります)。 - ダウンロードヘッダーを使用し、別の文字列をJSで別の処理に追加することはできません(答えが選択されたように)。しかし、ワークウォンドがあります(答えに記載されているように別ウィンドウで開きます)。 – Robbie
私はいつも「この要求には利用可能な応答データがありません」と表示されます。私は 'echo'と' return'を試しましたが、ダウンロードは開始されます。 – Black
それはうまくいく - エコーはダウンロードに追加されますが、あなたがしようとしているものに実際にぶつかりますが、あなたが尋ねたことをします。あなたが何をしたいのですか(つまり、ダウンロードが始まるか、プログラムが始まるときのJSのやりとり)、Javascript用のストリーミングAPI(IE10 +をサポートしていると思いますか?)を見て、ファイルをデータストリームおよび追加情報これはあなたの呼び出しですか、ダウンロードが始まるとただちに分岐することができます)。 saveAsを使用してデータのファイル部分を保存します。他のブラウザではフォールバックが必要で、動作させるには少し遊んでください。 – Robbie