2009-10-19 2 views
24

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

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

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

ответ

52

Если файлы находятся в одном домене, вы можете использовать AJAX для проверки их существования, поскольку Alex Sexton сказал; Однако вы не должны использовать метод GET, просто HEAD, а затем проверьте статус HTTP для значения ожидания (200 или только 400).

Вот простой метод, предоставляемый из related question:

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); 
}); 
+0

Хотел бы я знать, как реализовать это для вопроса ОП. Кто угодно? – Trip

+0

Что ты спрашиваешь? –

+0

Я получаю сообщение об ошибке с помощью этого кода: «Происхождение http: // localhost не разрешено Access-Control-Allow-Origin». – rob

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); 
0

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

2

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

1

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

Смежные вопросы