2011-09-19 26 views
9

Ben yüzden jQuery kullanarak ... müşterilerine özel veriler göstermeden önce bir dosya var olup olmadığını kontrol etmeniz gerekir ediyorum bu:- daima döndürür 200 yanıt

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

Ben işlevini çalıştırmayı denediğinizde: (example.com alanım olduğu)

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

, ben her zaman bir 200 yanıt kodu almak. Bunun neden olabileceğini merak ediyordum - .htaccess ile ayarlanmış özel bir hata sayfam olabilir mi? Ya da bunu yapmak için daha iyi bir yöntem var mı?

Not: jQuery 1.5.1 kullanılıyor.

Güncelleme: O .htaccess ile set bizim özel hata sayfasına yönlendirilir ediliyor görünüyor:

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

bu çakışmaya neden veya nasıl etrafında almak için emin değilim.

Ben bir 200 yanıt kodu dönüyordu, benim özel 404 sayfa için başlıklarını kontrol

ÇÖZÜLDÜ. - sorunumu sabitleme

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

sonra 404 yanıt kodu döndürür: Sert koduna başlığını vardı.

+1

Dosya mevcut olmasa bile olur mu? – 8vius

+0

Evet, örneğin: 123.jpg sunucuda yok, ancak yine de 200 durum kodu döndürüyor. –

+0

Sunucu düzgün ayarlanmadı gibi görünüyor. Bu kaynağı aldığınızda ne olur? Hala 200 tane alıyorsunuz, ama 404'ü öneren içerik var mı? Bu durumda yanlış yapılandırma gibi geliyor. –

cevap

7

Yayımlanmış olan özel 404 sayfamla birlikte çıktı, bu da 200 durum kodu döndürüyordu. Yaptığım sorunu çözen php header() işlevini kullanarak 404 yanıt kodunu kodlamam gerekiyordu. sayfa yaparsa Şimdi değil doğru izler var: sayfa/dosya süreliğine var olmadığını test etmek için basit yöntemi kullanarak

: öneri zaman uyumsuz yöntemine geçiş yapmak için

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

sayesinde @kalyfe için.

+0

PHP 5.4'ten beri' http_response_code (404); ' 404 durum kodu. –

9

Neden bu asenkronize olarak success and error numaralı çağrıları fark etmiyorsunuz?

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

    } 
}); 
+0

Yönteminizi kullanma Özel 404 hata sayfamıza geldiğini ve sonuç olarak bir 200 döndürdüğünü görebiliyorum. Bunun herhangi bir yolu var mı? –

+0

Not: Bunun için .htaccess içinde hiçbir şey yapmamak - 'ErrorDocument 404 http: // www.example.com/errors/notfound.php' –