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

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

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

当我尝试运行该函数时:

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

(其中example.com是我的域名),我总是收到200响应代码。 我想知道为什么会这样 – 可能是因为我有一个通过.htaccess设置的自定义错误页面? 或者,有更好的方法来做到这一点?

注意 :正在使用jQuery 1.5.1。

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

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

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

解决了

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

  

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

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

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

它似乎我的发布存在我的自定义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.'); } }); 

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