2011-09-19 11 views
9

Quindi ho bisogno di verificare se esiste un file prima di mostrare i dati specifici per i clienti ... utilizzando jQuery ho questo:Utilizzando Ajax e jQuery per verificare se il file esiste - restituisce sempre 200 risposta

<script> 
function fileExists(fileLocation) { 
    var response = $.ajax({ 
     url: fileLocation, 
     type: 'HEAD', 
     async: false 
    }).status; 
    alert(response); 
} 
</script> 

Quando provo a eseguire la funzione:

<script> fileExists('http://www.example.com/123.jpg'); </script> 

(dove example.com è il mio dominio), HO SEMPRE ricevuto un codice di risposta 200. Mi stavo chiedendo perché questo potrebbe accadere - potrebbe essere che ho una pagina di errore personalizzata impostata su .htaccess? O c'è un metodo migliore per farlo?

Nota: jQuery 1.5.1 viene utilizzato.

Aggiornamento: Sembra che è diretto alla nostra pagina di errore personalizzata impostare tramite .htaccess:

ErrorDocument 404 http://www.example.com/errors/notfound.php 

Non sono sicuro se questo fa sì che il conflitto, o come ottenere intorno ad esso.

risolto

ho controllato le intestazioni per la mia pagina 404 personalizzata, è stato restituito un codice di risposta 200. Ha dovuto codificare l'intestazione:

<?php header('HTTP/1.1 404 Not Found'); ?> 

che sarebbe poi restituire il codice di risposta 404 - fissare il mio problema.

+1

Si verifica anche quando il file non esiste? – 8vius

+0

Sì, ad esempio: 123.jpg non esiste sul server, ma restituisce comunque un codice di stato 200. –

+0

Sembra che il server non sia configurato correttamente. Cosa succede quando OTTIENE questa risorsa? Hai ancora un 200, ma con contenuti che suggeriscono 404? In tal caso sembra una configurazione errata. –

risposta

7

Sembrava che il mio emesso esistesse con la mia pagina 404 personalizzata, che restituiva un codice di stato 200. Ho dovuto codificare il codice di risposta 404 utilizzando la funzione php header(), che risolveva il problema che stavo svolgendo. Ora, non se la pagina non esiste segue correttamente:

Utilizzando un metodo semplice per verificare se esiste pagina/file per il momento:

$.ajax({ 
    type: 'HEAD', 
    url: 'http://www.example.com/index.php', 
    success: function() { 
     alert('Page found.'); 
    }, 
    error: function() { 
     alert('Page not found.'); 
    } 
}); 

Grazie alla @kalyfe per il suggerimento per passare alla modalità asincrona.

+0

Dal PHP 5.4, puoi usare' http_response_code (404); 'per impostare un codice di stato 404. –

9

Perché non te ne rendi conto in modo asincrono con i callback success and error?

$.ajax({ 
    type: 'HEAD', 
    url: fileLocation, 
    success: function(msg){ 
    alert(msg); 
    }, 
    error: function(jqXHR, textStatus, errorThrown){ 
    log(jqXHR); 
    log(errorThrown); 

    } 
}); 
+0

Usando il tuo metodo, vedo che sta visualizzando la nostra pagina di errore 404 personalizzata e ne restituisce 200 come risultato. In qualche modo intorno a questo? –

+0

Nota: non fare nulla di pazzo in .htaccess per questo - 'ErrorDocument 404 http: // www.example.com/errors/notfound.php' –

Problemi correlati