2011-09-19 17 views
9

Así que estoy que comprobar si existe un archivo antes de mostrar los datos específicos de los clientes ... usando jQuery tengo esto:El uso de Ajax y jQuery para comprobar si existe el archivo - siempre devuelve respuesta 200

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

Cuando intento ejecutar la función:

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

(donde example.com es mi dominio), SIEMPRE recibo un código de respuesta de 200. Me preguntaba por qué podría estar pasando esto. ¿Podría ser que tengo una página de error personalizada configurada a través de .htaccess? O, ¿hay un mejor método para hacer esto?

Nota: jQuery 1.5.1 se está utilizando.

actualización: Parece que está siendo dirigida a nuestra página de error personalizada establecida a través .htaccess:

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

No estoy seguro si esto causa el conflicto, o cómo conseguir alrededor de él.

RESUELTO

Revisé las cabeceras para mi página 404, se devuelve un código de respuesta 200. Tuve que codificar el encabezado:

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

que luego devolvería el código de respuesta 404 - solucionando mi problema.

+1

¿Sucede incluso cuando el archivo no existe? – 8vius

+0

Sí, por ejemplo: 123.jpg no existe en el servidor, pero devuelve un código de estado de 200 de todos modos. –

+0

Parece que el servidor no está configurado correctamente. ¿Qué sucede cuando OBTIENES ese recurso? ¿Todavía obtienes 200, pero con contenido que sugiere 404? En cuyo caso eso suena como una configuración incorrecta. –

Respuesta

7

Parecía que mi emitido existía con mi página 404 personalizada, que devolvía un código de estado de 200. Tuve que codificar el código de respuesta 404 usando la función php header(), que resolvió el problema que estaba teniendo. Ahora bien, si la página no se sigue correctamente existe:

El uso de un método sencillo para comprobar si existe la página/archivo por el momento:

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

Gracias a @kalyfe por la sugerencia para cambiar al método asíncrono.

+0

Desde PHP 5.4, puede usar' http_response_code (404); 'para establecer un código de estado 404. –

9

¿Por qué no te das cuenta de esto de forma asíncrona con las devoluciones de llamada success and error?

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

    } 
}); 
+0

Usando su método, puedo ver que está viendo nuestra página de error 404 personalizada y, como resultado, devuelve 200. De cualquier forma alrededor de esto? –

+0

Nota: No hace nada loco en .htaccess para esto - 'ErrorDocument 404 http: // www.example.com/errors/notfound.php' –

Cuestiones relacionadas