2009-10-19 24 views
24

Ben dahili kullanım için pdf dosyaları bir koleksiyon erişmek için küçük bir JavaScript/jQuery programı geliştirdi. Ve dosya gerçekten var ise vurgulanmış bir pdf dosyasının bilgi div sahip olmak istedim.JavaScript/jQuery onay kırık bağlantılar

bir dosyaya bir bağlantı bozuk olup olmadığını programlı belirlemek için bir yolu var mı? Öyleyse nasıl?

Herhangi kılavuz veya öneri

benimsendi. dosyaları harici web sitesinde değilseniz

cevap

52

, o zaman Alex Sexton söylediği gibi onların varlığını sınamak için AJAX kullanabilirsiniz; ancak, sadece HEAD ve ardından HTTP bekliyoruz değeri için durumu (200, ya da sadece az 400) kontrol GET yöntemi kullanmamalıdır.

İşte related question sağlanan basit bir yöntem vardır:

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

arkasındayım. Kimse? – Trip

+0

Ne soruyorsunuz? –

+0

Bu kodla ilgili bir hata alıyorum: "Origin http: // localhost Erişim-Denetime İzin Ver - Menşei ile izinli değil." – rob

2

, her dosya için bir ajax isteği yapan deneyebilirsin. Eğer bir başarısızlık olarak geri dönerse, o zaman var olmadığını biliyorsunuzdur, aksi takdirde, eğer tamamlanmışsa ve/veya belirli bir eşikten daha uzun sürerse, var olduğunu tahmin edebilirsiniz. Her zaman mükemmel değildir, ancak genellikle 'filenotfound' istekleri hızlıdır.

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

Buraya $.ajax yapabilirsiniz. Dosya yoksa 404 hatası alırsınız ve sonra hata geri bildirimde ihtiyacınız olan her şeyi (UI-bilge) yapabilirsiniz. İsteğin nasıl tetikleneceği size bağlıdır (zamanlayıcı?) Tabii ki bazı sunucu tarafı kodlama yapabilme yeteneğine sahipseniz, tek bir AJAX isteği yapabilirsiniz - dizini tarayın ve sonuçları JSON olarak söyleyin. dosyalar aynı etki alanında ise

2

Sayı başka bir alandan içerik kapmak olamaz böylece JavaScript aynı kaynak politikası olmasıdır. Bu onu geri çekerek değişmeyecek (17 oy hakkında merak). Sana dış bağlantılar için bunu ihtiyacım olduğunu düşünüyorum, Sebastian nedeniyle aynı kökenli politikasına mümkün değildir dediği gibi ... bir anda Js ile

1

imkansızdır. Site bir kamu malı üzerinde (geçici olarak) yayınlanabiliyorsa, oradaki bağlantı denetleyici hizmetlerinden birini kullanabilirsiniz. Ben OP'ın soru için bu nasıl uygulanacağını bilseydim checkerr.org