我开发了一个小的Javascript / jQuery的程序访问的PDF文件的集合供内部使用。 我想有一个PDF文件的信息DIV强调,如果该文件确实存在。
有没有一种方法以编程方式确定是否以文件的链接被打破? 如果是这样,怎么样?
任何指南或建议被拨。
我开发了一个小的Javascript / jQuery的程序访问的PDF文件的集合供内部使用。 我想有一个PDF文件的信息DIV强调,如果该文件确实存在。
有没有一种方法以编程方式确定是否以文件的链接被打破? 如果是这样,怎么样?
任何指南或建议被拨。
如果文件是在同一个域,那么你可以使用AJAX来测试他们的存在为亚历克斯·塞克斯顿说。 但是,你不应该使用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有同源策略,所以你不能抓住从另一个域的内容。 这将不会被upvoting它(想了解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);
就像塞巴斯蒂安说,这是不可能的,因为同源策略。 如果网站可以发布(临时)在公共领域,你可以使用的链接检查服务之一在那里。 我身后checkerr.org
您可以$.ajax
它。 如果文件不存在,你会得到404错误,那么你可以做任何你需要在错误回调(UI明智)。 这取决于你如何触发请求(定时器?)当然,如果你也必须做一些服务器端的编码,你可以做一个Ajax请求的能力 - 扫描目录,然后返回结果说JSON。
正如其他人所说,因为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);
});