的JavaScript。在不下载内容的情况下检查URL的响应类型

时间:2017-10-27 04:27:30

标签: javascript jquery ajax

我有一个可以在服务器上运行报告的Web应用程序。报告存储在服务器上一段时间。当我发送报告URL时,服务器要么返回报告(以XLS格式),要么返回一个简单的"文件未找到"文字(没有错误) 下次用户登录时,我希望能够检查报告是否仍然存在或者是否需要再次运行。我可以简单地使用JQuery.ajax在后台调用URL并检查我得到的响应类型。但是,这意味着报告已完全下载,如果不是100个潜在报告,我有10个。 有没有什么方法可以查询服务器,这样我只得到我将得到的响应类型,而不下载内容(即XLS,或二进制 - >报告可用;文本 - >报告丢失)? 请注意,我无法控制服务器的行为。 感谢

3 个答案:

答案 0 :(得分:0)

请求标头是一个检查的好地方,因为它们可能包含将要发送的文件类型。为了只检索请求的标题,没有正文(这是导致下载的原因),只需执行

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

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

如果api构建正确,则此request.getAllResponseHeaders()将包含具有Content-Type的标头。这应该可以让您了解是否有可用的文件。

答案 1 :(得分:0)



<!DOCTYPE html>
<html>
<head>
	<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>
&#13;
&#13;
&#13;

答案 2 :(得分: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             
        }
});