Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript/jQuery检查断开的链接_Javascript_Jquery_Broken Links - Fatal编程技术网

JavaScript/jQuery检查断开的链接

JavaScript/jQuery检查断开的链接,javascript,jquery,broken-links,Javascript,Jquery,Broken Links,我开发了一个小的Javascript/jQuery程序来访问pdf文件集合供内部使用。我想突出显示pdf文件的信息div,如果该文件确实存在 是否有一种方法可以通过编程确定指向文件的链接是否已断开?如果是,怎么做 任何指导或建议都是适当的。如果文件不在外部网站上,您可以尝试为每个文件发出ajax请求。如果它以失败的形式返回,那么您知道它不存在,否则,如果它完成和/或返回所需时间超过给定的阈值,您可以猜测它存在。它并不总是完美的,但通常“filenotfound”请求很快 var threshol

我开发了一个小的Javascript/jQuery程序来访问pdf文件集合供内部使用。我想突出显示pdf文件的信息div,如果该文件确实存在

是否有一种方法可以通过编程确定指向文件的链接是否已断开?如果是,怎么做


任何指导或建议都是适当的。

如果文件不在外部网站上,您可以尝试为每个文件发出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。

如果文件位于同一个域上,那么您可以使用AJAX测试它们是否存在但是,您不应该使用
GET
方法,只需
HEAD
然后检查HTTP状态中的期望值(200,或小于400)

下面是一个简单的方法:

函数urlExists(url,回调){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=函数(){
if(xhr.readyState==4){
回调(xhr.status<400);
}
};
xhr.open('HEAD',url);
xhr.send();
}
URLEISTS(someUrl,函数(exists){
console.log(“%s”exists?’,someUrl,exists);
});

问题在于JavaScript具有相同的源策略,因此您无法从其他域获取内容。这一点不会因为向上投票而改变(想知道17票的情况)。
我认为您需要它来进行外部链接,因此仅使用.js是不可能的…

正如Sebastian所说,由于同源策略,这是不可能的。如果该网站可以(临时)在公共域上发布,您可以使用其中一个链接检查器服务。正如其他人所提到的,由于JavaScript的同源策略,仅使用接受答案中的函数是不可行的。解决方法是使用代理服务器。您不必为此使用自己的代理,您可以使用此服务,例如:(代码)

代码如下所示:

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);
});
var proxyUrl=”https://cors-anywhere.herokuapp.com/";
函数urlExists(url,回调){
var sameOriginURL=proxyUrl+url;
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=函数(){
if(xhr.readyState==4){
回调(xhr.status<400);
}
};
xhr.打开('头部',相同初始值);
xhr.send();
}
URLEISTS(someUrl,函数(exists){
console.log(“%s”exists?’,someUrl,exists);
});

我希望我知道如何解决OP的问题。有人吗?我的代码有一个错误:“访问控制不允许源代码允许源代码。”请查找JavaScript的同源策略。只有在服务器允许的情况下。可以启用/禁用。问题中嵌入的URL现在是404,我删除了超链接。
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);
});