0

私は ZIP ファイルを提供する perl スクリプトの URL を持っています。これはデータを処理し、http ヘッダーに動的に設定Content-Typeします。'application/zip'

Perl コードは次のようになります。

WPHTTPResponse::setHeader( 'Content-disposition', 'attachment;filename="test.zip"');
WPHTTPResponse::setHeader( 'Content-type', 'application/zip');  
print $result;

フロントエンドでは、このスクリプトを HREF で直接使用しています。

      <a href="/script">Download</a>

$resultしかし、perl スクリプトで NULL の場合に警告メッセージを表示する必要があります。

私が考えているのはContent-Type=>application/zip、 $result がnullでない場合はファイルを送信し、そうでない場合は、ダウンロードするファイルがないというエラーメッセージを含むJSON応答を送信することです。

このためには、JS を使用してコンテンツ タイプを動的にチェックする必要があります。

$.ajax({
  url: '/script',
  data: {....},
  success: function(response) {
     if(response.contentType == 'application/zip'){
        //download using javascript
     }
     else{
        $.parseJSON(response);
        alert(response.msg);
     }
  }
});

助けていただければ幸いです。

4

2 に答える 2

1

この方法は機能するはずですが、これはおそらく HTTP エラー コードを使用する方が適切な場合です。

$result が null である理由に応じて、これらのいずれかが適切なはずです。

400 Bad Request
406 Not Acceptable
410 Gone

これにより、コードに独自の方法でまったく同じことを再実装するのではなく、HTTPステータスを正確に使用するため、コードがわずかに「明白」になります。私見は、成功とエラーを分離するため、コードの保守も少し簡単になります。

エラー応答の一部として JSON を含めることもできます。これにより、要求によってデータがクライアントに返されなかった正確な理由に関する情報を表示できます。

ところで、実際の 404 エラーが発生した場合に混乱を招くという理由だけで、404 が技術的に最も「適切な」コードであっても、エラー コードとして 404 を使用することは避けたいと思います。

于 2012-06-22T05:42:01.617 に答える
1

-request を使用HEADして、ダウンロード前にコンテンツ サイズを確認します。

クライアント側:

  • click-event ハンドラーを-element にアタッチし<a>ます。
  • オンclickイベント送信HEADリクエスト スローXHR.
  • オンXHRレスポンス チェック コンテンツ サイズ。
  • サイズがゼロの場合、アラートを表示し、デフォルトのイベント ハンドラーを防止します。
  • サイズがゼロでない場合、何もしません。

サーバ側:

  • 要求に応じてコンテンツ サイズを計算しますHEAD
于 2012-06-22T05:51:43.650 に答える