jQuery:检查图像是否存在

我正在通过jQuery $ .ajax加载图像path,并显示图像之前,我想检查它是否存在。 我可以使用图像加载/就绪事件或类似的东西来确定文件path是有效的吗?

.myimage设置为显示:无,我希望能做类似的事情

$(".myimage").attr("src", imagePath); $(".myimage").load(function() { $(this).show(); }); 

有这样的可能吗?

那么,你可以绑定.error()处理程序…

喜欢这个,

 $(".myimage").error(function(){ $(this).hide(); }); 

那么,你的加载事件已经可以了

 $(".myimage").load(function() { $(this).show(); }); 

这个问题是,如果JavaScript被禁用的形象将永远不会显示…

尝试:

 function urlExists(testUrl) { var http = jQuery.ajax({ type:"HEAD", url: testUrl, async: false }) return http.status; // this will return 200 on success, and 0 or negative value on error } 

然后使用

 if(urlExists('urlToImgOrAnything') == 200) { // success } else { // error } 

我知道一个古老的线索,但我认为它可以改进。 我注意到OP有间歇性的问题,这可能是由于加载的图像和错误检查同时。 最好先载入图像,然后检查错误:

 $(".myimage").attr("src", imagePath).error(function() { // do something }); 

既然你已经在做一个AJAX请求,我将把它卸载到支持你的AJAX的服务器端应用程序。 检查服务器是否存在文件是很简单的,您可以在发回的数据中设置variables来指定结果。

这个问题已经有几年了,但是对于任何正在查看这个问题的人来说,这个error handling程序都是一个更好的示例用法。

 $("img") .error(function(){ $(this).hide(); }) .attr("src", "image.png"); 

在尝试加载图像以捕捉事件之前,您需要附加error handling程序。

资料来源: http : //api.jquery.com/error/

这就是我所做的:

 $.get( 'url/image', function(res){ //Sometimes has a redirect to not found url //Or just detect first the content result and get the a keyword for 'indexof' if ( res.indexOf( 'DOCTYPE' ) !== -1 ) { //not exists } else { //exists } });