使用Ajax和jQuery检查文件是否存在 - 始终返回200响应

Wil*_*azi 9 javascript ajax jquery

所以我需要在向客户端显示特定数据之前检查文件是否存在...使用jQuery我有:

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

当我尝试运行该功能时:

<script> fileExists('http://www.example.com/123.jpg'); </script>
Run Code Online (Sandbox Code Playgroud)

(其中example.com是我的域名),我总是收到200响应代码.我想知道为什么会发生这种情况 - 是不是我通过.htaccess设置了自定义错误页面?或者,有更好的方法来做到这一点?

注意:正在使用jQuery 1.5.1.

更新:它似乎被定向到通过.htaccess设置的自定义错误页面:

ErrorDocument 404 http://www.example.com/errors/notfound.php
Run Code Online (Sandbox Code Playgroud)

不确定这是否会导致冲突,或者如何解决冲突.

解决了

我检查了自定义404页面的标题,它返回了200个响应代码.必须硬编码标题:

<?php header('HTTP/1.1 404 Not Found'); ?>
Run Code Online (Sandbox Code Playgroud)

然后将返回404响应代码 - 修复我的问题.

kal*_*yfe 10

你为什么不与回调的成功和错误异步地意识到这一点?

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

   }
 });
Run Code Online (Sandbox Code Playgroud)


Wil*_*azi 8

它似乎我的发布存在我的自定义404页面,它返回200状态代码.我不得不使用php header()函数对404响应代码进行硬编码,这解决了我遇到的问题.现在,如果页面不存在,则说明正确:

使用一种简单的方法来测试页面/文件目前是否存在:

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

感谢@kalyfe建议切换到异步方法.