Javascript jQuery:获取图像加载错误的详细信息

Javascript jQuery:获取图像加载错误的详细信息,javascript,jquery,image,http,Javascript,Jquery,Image,Http,我有一个javascript,它调用服务器端脚本(PHP),提供请求的图像。为用户和图像键传递了一些参数 如果请求的图像不存在,我将以404错误响应。 如果图像存在,但用户没有访问它的权限,我将以403错误响应 下面是一个简化的代码示例 $img.error(函数(){ 警报(“图像未知或访问被拒绝”); }) .attr(“src”,“getimg.php?key=horse&user=fred”)当您将PHP脚本的url直接放在src属性中时,您的javascript在获取图像时不会意识到

我有一个javascript,它调用服务器端脚本(PHP),提供请求的图像。为用户图像键传递了一些参数

如果请求的图像不存在,我将以404错误响应。 如果图像存在,但用户没有访问它的权限,我将以403错误响应

下面是一个简化的代码示例

$img.error(函数(){
警报(“图像未知或访问被拒绝”);
})

.attr(“src”,“getimg.php?key=horse&user=fred”)当您将PHP脚本的url直接放在src属性中时,您的javascript在获取图像时不会意识到任何错误。解决此问题的一种方法是对图像发出AJAX请求:

$.ajax( "getimg.php?key=horse&user=fred" )
 .fail(function(jqXHR) {
    // do something here when the image wasn't loaded
    if(jqXHR.status === 403) {
       // access denied
    } else if(jqXHR.status === 404) {
      // not found
    }
  });
jqXHR
对象包含诸如抛出了什么状态代码、服务器的响应是什么等信息。更多信息


请注意,我在这里只使用
.fail()
回调函数,在图像加载成功时不做任何事情。在图像中使用AJAX没有什么意义,您仍然可以将src设置为正确的url,这样可以在加载图像时处理所有事情。我们在这里使用AJAX的唯一原因是为了防止出现问题。

我曾想过尝试使用AJAX,但后来无法确定是否可以在成功时将响应分配给图像。根据你的建议,我要给服务器打两个电话吗?也许它会被缓存,这样就没问题了?是的,请求将被触发两次。我不完全确定,但由于许多图像预加载程序使用类似的结构,我相信这种方法将允许缓存图像。最初,当我尝试此方法时,它会重复请求,因此我需要在服务器端进行一些更改,以确保图像被缓存。。。标头(“缓存控制:最大年龄=86400”);标题(“Pragma:cache”);现在效果很好。谢谢