使用ajax jQuery检查链接statusCode相同的原始策略问题

时间:2012-04-30 17:52:36

标签: jquery ajax

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

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

其中“link”是指向其他网站上的图片网址的链接。我知道因为相同的原始策略我无法真正向其他网站发出请求,但是如果我想要检查的是返回状态,是否有一些例外?

2 个答案:

答案 0 :(得分:1)

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

你应该可以这样做:

http://jsfiddle.net/GL9eU/

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

答案 1 :(得分: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);
      });
}