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