2009-10-19 40 views
24

Tôi đã phát triển một chương trình Javascript/jQuery nhỏ để truy cập tập hợp các tệp pdf để sử dụng nội bộ. Và tôi muốn có thông tin div của một tệp pdf được tô sáng nếu tệp thực sự tồn tại.JavaScript/jQuery kiểm tra các liên kết bị hỏng

Có cách nào để lập trình xác định xem liên kết đến tệp có bị hỏng hay không? Nếu vậy, Làm thế nào?

Bất kỳ hướng dẫn hoặc đề xuất nào đều được chiếm đoạt.

Trả lời

52

Nếu các tệp nằm trên cùng một tên miền, thì bạn có thể sử dụng AJAX để kiểm tra sự tồn tại của chúng là Alex Sexton cho biết; Tuy nhiên, , bạn không nên sử dụng phương pháp GET, chỉ cần HEAD và sau đó kiểm tra trạng thái HTTP cho giá trị kỳ vọng (200 hoặc chỉ dưới 400).

Dưới đây là một phương pháp đơn giản được cung cấp từ một 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

Tôi ước mình biết cách thực hiện điều này cho câu hỏi của OP. Bất kỳ ai? – Trip

+0

Bạn đang hỏi gì? –

+0

Tôi gặp lỗi với mã này: "Nguồn gốc http: // localhost không được Access-Control-Allow-Origin cho phép". – rob

2

Nếu các tệp không có trên trang web bên ngoài, bạn có thể thử thực hiện yêu cầu ajax cho từng tệp. Nếu nó trở lại như là một thất bại, sau đó bạn biết nó không tồn tại, nếu không, nếu nó hoàn thành và/hoặc mất nhiều thời gian hơn một ngưỡng nhất định để quay trở lại, bạn có thể đoán rằng nó tồn tại. Nó không phải lúc nào cũng hoàn hảo, nhưng thường yêu cầu 'filenotfound' rất nhanh.

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

Bạn có thể $.ajax. Nếu tập tin không tồn tại, bạn sẽ nhận được lỗi 404 và sau đó bạn có thể làm bất cứ điều gì bạn cần (UI-khôn ngoan) trong gọi lại lỗi. Tất nhiên nếu bạn cũng có khả năng thực hiện một số mã phía máy chủ, bạn có thể thực hiện một yêu cầu AJAX duy nhất - quét thư mục và sau đó trả lại kết quả như nói JSON.

2

Issue là JavaScript có chính sách cùng một nguồn gốc, do đó bạn không thể lấy nội dung từ tên miền khác. Điều này sẽ không thay đổi bằng cách upvoting nó (tự hỏi về 17 phiếu). Tôi nghĩ bạn cần nó cho các liên kết bên ngoài, vì vậy không thể chỉ với .js ...

1

Cũng giống như Sebastian nói rằng không thể thực hiện được do chính sách gốc. Nếu trang web có thể được xuất bản (tạm thời) trên một miền công cộng, bạn có thể sử dụng một trong các dịch vụ kiểm tra liên kết ngoài đó. Tôi đứng sau checkerr.org

Các vấn đề liên quan