0

我想要对我的 ajax 代码做的就是检查请求返回的 HTML 状态代码(搜索带有链接的 404)。我编写了以下代码:

$.ajax({
    url: link,
    statusCode: {
        404: function() {
            alert("Not found");
        },
        200: function() {
            alert("Found!");
        }
    }
});

其中“链接”是指向另一个站点上的图像 url 的链接。我知道由于相同的来源政策,我不能真正向其他网站发出请求,但是如果我只想检查返回状态,是否有一些例外?

4

2 回答 2

1

听起来您正在尝试动态确定是否加载了图像资源。

你应该能够做这样的事情:

http://jsfiddle.net/GL9eU/

基本上,使用 jQuery 加载和错误处理程序来确定是否加载了某样东西。

于 2012-04-30T18:05:31.040 回答
1

当你试图做你不应该做的事情时,我喜欢使用的一种策略是找到它已经适用于浏览器的地方,然后欺骗它为我工作。在跨域下载图片方面,浏览器已经在<img>标签中实现了这个功能。

图像标签支持加载的 DOM 事件,如果图像加载成功,您可以使用该事件进行捕获。

缺点是您并不总是知道返回的图像是实际图像还是重定向图像,因为服务器现在配置为允许图像的热链接。您也没有迹象表明请求是否失败。

后一个缺点可以通过一个计时器来克服,虽然它不像你想要的那么强大,但可能仍然可以根据你的应用程序工作。

这是我编写的一些示例(即未经测试的)代码,以给您一个想法...

function isImagePathValid(src, callback) {
   // Setup a timer to catch if it never loads
   var fallback = setTimeout(function() {
       callback(false);
   }, 5000);  // Wait 5 seconds

   // Create a temp <img> tag and wait for it to load
   $('<img style="position:absolute; top:-9999; left:-9999;" src="' + src + '" />')
      .appendTo('body')
      .load(function() {
          clearTimeout(fallback);
          callback(true);
      });
}
于 2012-04-30T18:07:30.870 回答