2009-10-19 15 views
24

Ho sviluppato un piccolo programma Javascript/jQuery per accedere a una raccolta di file PDF per uso interno. E volevo avere il div informazioni di un file pdf evidenziato se il file esiste realmente.JavaScript/jQuery controllare i collegamenti interrotti

C'è un modo per determinare a livello di programmazione se un collegamento a un file è rotto? Se é cosi, come?

Qualsiasi guida o suggerimento è appropriato.

risposta

52

Se i file si trovano nello stesso dominio, è possibile utilizzare AJAX per verificare la loro esistenza come Alex Sexton detto; tuttavia, non utilizzare il metodo GET, solo HEAD e quindi controllare lo stato HTTP per il valore previsto (200 o solo meno di 400).

Ecco un metodo semplice fornito da un 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

Vorrei sapere come implementarlo per la domanda dell'OP. Chiunque? – Trip

+0

Cosa stai chiedendo? –

+0

Viene visualizzato un errore con questo codice: "Origine http: // localhost non è consentito da Access-Control-Allow-Origin." – rob

2

Se i file non si trovano su un sito Web esterno, è possibile provare a effettuare una richiesta Ajax per ciascun file. Se ritorna come un fallimento, allora sai che non esiste, altrimenti, se termina e/o impiega più tempo di una determinata soglia per tornare, puoi immaginare che esista. Non è sempre perfetto, ma generalmente le richieste "filenotfound" sono veloci.

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

È possibile eseguire $.ajax. Se il file non esiste si otterrà l'errore 404 e quindi si potrà fare tutto ciò di cui si ha bisogno (UI-saggio) nella richiamata dell'errore. Sta a te decidere come attivare la richiesta (timer?) Naturalmente se hai anche la possibilità di eseguire alcune codifiche sul lato server, puoi eseguire una singola richiesta AJAX: eseguire la scansione della directory e quindi restituire i risultati come dice JSON.

2

problema è che JavaScript ha la stessa politica di origine e quindi non si può afferrare il contenuto da un altro dominio. Questo non cambierà con l'upvoting (chiedendo i 17 voti). Penso che ne hai bisogno per i collegamenti esterni, quindi è impossibile solo con .js ...

1

Come Sebastian dice che non è possibile a causa della stessa politica di origine. Se il sito può essere pubblicato (temporaneamente) su un dominio pubblico, è possibile utilizzare uno dei servizi di controllo dei link disponibili. Sono indietro checkerr.org

Problemi correlati