我开发了一个小型 Javascript/jQuery 程序来访问一组供内部使用的 pdf 文件。如果文件实际存在,我希望突出显示 pdf 文件的信息 div。
有没有办法以编程方式确定文件的链接是否损坏?如果是这样,如何?
任何指南或建议都是适当的。
我开发了一个小型 Javascript/jQuery 程序来访问一组供内部使用的 pdf 文件。如果文件实际存在,我希望突出显示 pdf 文件的信息 div。
有没有办法以编程方式确定文件的链接是否损坏?如果是这样,如何?
任何指南或建议都是适当的。
如果文件在同一个域中,那么您可以使用 AJAX 来测试它们是否存在,正如Alex Sexton所说;但是,您不应该使用该GET
方法,HEAD
而应检查 HTTP 状态的期望值(200,或仅小于 400)。
这是一个相关问题提供的简单方法:
function urlExists(url, callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
callback(xhr.status < 400);
}
};
xhr.open('HEAD', url);
xhr.send();
}
urlExists(someUrl, function(exists) {
console.log('"%s" exists?', someUrl, exists);
});
问题是 JavaScript 具有相同的源策略,因此您无法从另一个域中获取内容。投票不会改变这一点(想知道 17 票)。我认为您需要外部链接,因此仅使用 .js 是不可能的...
如果文件不在外部网站上,您可以尝试为每个文件发出 ajax 请求。如果它作为失败返回,那么您知道它不存在,否则,如果它完成和/或返回时间超过给定阈值,您可以猜测它存在。它并不总是完美的,但通常“filenotfound”请求很快。
var threshold = 500,
successFunc = function(){ console.log('It exists!'); };
var myXHR = $.ajax({
url: $('#checkme').attr('href'),
type: 'text',
method: 'get',
error: function() {
console.log('file does not exist');
},
success: successFunc
});
setTimeout(function(){
myXHR.abort();
successFunc();
}, threshold);
你可以$.ajax
给它。如果文件不存在,您将收到 404 错误,然后您可以在错误回调中执行您需要的任何操作(UI 方面)。由您决定如何触发请求(计时器?)当然,如果您也有能力进行一些服务器端编码,您可以执行单个 AJAX 请求 - 扫描目录,然后以 JSON 格式返回结果。
就像塞巴斯蒂安所说,由于相同的原产地政策,这是不可能的。如果该站点可以(临时)在公共域上发布,您可以使用其中一种链接检查器服务。我支持 checkerr.org
正如其他人所提到的,由于 JavaScript 的同源策略,仅使用已接受答案中的函数是行不通的。解决方法是使用代理服务器。您不必为此使用自己的代理,您可以使用此服务,例如:https ://cors-escape.herokuapp.com(此处为代码)。
代码如下所示:
var proxyUrl = "https://cors-anywhere.herokuapp.com/";
function urlExists(url, callback) {
var sameOriginURL = proxyUrl + url;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
callback(xhr.status < 400);
}
};
xhr.open('HEAD', sameOriginURL);
xhr.send();
}
urlExists(someUrl, function(exists) {
console.log('"%s" exists?', someUrl, exists);
});