Подтвердить что ты не робот

JavaScript/jQuery проверить неработающие ссылки

Я разработал небольшую программу Javascript/jQuery для доступа к коллекции файлов PDF для внутреннего использования. И я хотел, чтобы информация div файла PDF была выделена, если файл действительно существует.

Есть ли способ программно определить, нарушена ли ссылка на файл? Если да, How?

Любое руководство или предложение присваивается.

4b9b3361

Ответ 1

Если файлы находятся в одном домене, вы можете использовать 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);
});

Ответ 2

Если файлы не находятся на внешнем веб-сайте, вы можете попробовать сделать запрос 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);

Ответ 3

Проблема заключается в том, что JavaScript имеет одну и ту же политику происхождения, поэтому вы не можете захватывать контент из другого домена. Это не изменится, увеличив его (задаваясь вопросом о 17 голосах). Я думаю, вам нужно это для внешних ссылок, поэтому это невозможно с помощью .js...

Ответ 4

Как и Себастьян говорит, что это невозможно из-за той же политики происхождения. Если сайт может быть опубликован (временно) в общедоступном домене, вы можете использовать одну из служб проверки ссылок. Я за checkerr.org

Ответ 5

Вы можете $.ajax к нему. Если файл не существует, вы получите ошибку 404, и тогда вы сможете делать все, что вам нужно (UI-мудрый) в обратном вызове. Это зависит от вас, как вызвать запрос (таймер?). Конечно, если у вас также есть возможность делать некоторые серверные кодировки, вы можете сделать один запрос AJAX - сканировать каталог и затем возвращать результаты, как говорят JSON.