我正在开发一个PHP应用程序,可能需要几秒钟来加载下一页。为了防止用户在下一页加载时点击垃圾邮件(并让他们知道页面正在加载),我实现了一个覆盖页面的页面加载微调器:
// Assume all internal links start with "http://www.example.com"
$('a[href*="http://www.example.com"]').on("click", function () {
var href = $(this).attr("href");
if (!href || href[0] === "#") {
location.hash = href;// set that hash
return;
} else {
location = href;
$(".loading-spinner").fadeIn(100, function () {
setTimeout(function(){ $(".loading-spinner").fadeOut(200); }, 10000); // 10 second loading maximum
});
}
return false;
});
如果链接开始下载文件,我想在检测到下载后立即淡出.loading-spinner
。
有没有办法检测链接是否触发下载而不是使用javascript / jQuery加载页面,还是需要专门识别所有下载链接(使用特殊类等)?
答案 0 :(得分:1)
向URL发送一个AJAX请求,并使用getResponseHeader
函数获取内容类型:
$.get(url, function (response, status, xhr) {
if (xhr.getResponseHeader("content-type").indexOf("text") > -1)
// Text based stuff.
else
// Download based stuff. (eg., application/pdf, etc.)
});
更多信息:
XMLHttpRequest.getResponseHeader()
方法返回包含指定标题文本的字符串,如果尚未收到响应或标题不存在,则返回null
在回应中。如果有多个具有相同名称的响应头,则它们的值将作为单个连接字符串返回,其中每个值通过一对逗号和空格与前一个值分隔。getResponseHeader()
方法将值作为UTF字节序列返回。