2017-10-27 5 views
0

私はサーバー上でレポートを実行できるWebアプリケーションを持っています。レポートは一定の時間サーバーに保存されます。レポートURLを送信すると、サーバーはレポートを返信(XLS形式)するか、単純な「ファイルが見つかりません」というテキストを返します(エラーなし) 次回ユーザーがログインすると、レポートはまだそこにあるか、または再度実行する必要があります。私は単純にJQuery.ajaxを使ってバックグラウンドでURLを呼び出し、私が得る応答のタイプをチェックすることができます。しかし、これはレポートが完全にダウンロードされたことを意味し、潜在的なレポートが100件もない場合は10件あります。 私はコンテンツをダウンロードすることなく、私が得るレスポンスのタイプを得ることができるようにサーバーを照会する方法はありますか(すなわち、XLSまたはバイナリー - >レポートが利用可能、テキスト - >レポートが欠落しています) ? 私はサーバーの動作を制御できないことに注意してください。 ありがとうJavascript。コンテンツをダウンロードせずにURLからの応答のタイプを確認する

答えて

0

リクエストヘッダーは、送信されるファイルの種類が含まれている可能性があるため、確認するのが良い場所です。 (ダウンロードを引き起こすものである)、本体なしで、唯一のリクエストのヘッダを取得するためには、単にAPIが適切に構築された場合は、Content-Typeを持つことになり、ヘッダーが含まれています。このrequest.getAllResponseHeaders()

var request = new XMLHttpRequest(); 
request.open("HEAD", url, async); 
request.send(); 

request.onreadystatechange = function() { 
    if(this.readyState == this.HEADERS_RECEIVED) { 
    request.getAllResponseHeaders() 
    } 
} 

を行います。それは、利用可能なファイルがあるかどうかのアイデアを与えるはずです。ループを閉じる

+0

良いキャッチは、答えを更新! xhrはXMLHttpRequestです。本質的にはjQueryを使用しないAJAX呼び出しです –

+0

これは適切な実装です –

0

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
\t <title></title> 
 
</head> 
 
<body> 
 

 
    <script type="text/javascript"> 
 

 
     var url = 'some_url'; 
 

 
     var xhttp = new XMLHttpRequest(); 
 
     xhttp.onreadystatechange = function() { 
 
      if (this.readyState == 4 && this.status == 200) { 
 
       var content_type = xhttp.getResponseHeader("Content-Type"); 
 
       if (content_type.indexOf('text/html') == -1){ 
 
        alert('excel'); 
 
       } 
 
       else { 
 
        alert('file not found'); 
 
       } 
 
      } 
 
      else { 
 
       alert('invalid url'); 
 
      } 
 
     }; 
 
     xhttp.open("HEAD", url, true); 
 
     xhttp.send(); 
 

 
    </script> 
 
</body> 
 
</html>

0

、この溶液に私を導いたあなたのコメントに感謝。 JQueryを使用すると、これはうまく動作しているようです。

req=$.ajax({ 
    type:'HEAD', 
    url:'url', 
success: function() { 
      if(req.getAllResponseHeaders().indexOf("ms-excel.sheet")>=0{}//report is available    
      else{} //report is not available    
     } 
}); 
関連する問題