【问题标题】:Check link statusCode using ajax jQuery same origin policy issues使用 ajax jQuery 同源策略问题检查链接 statusCode
【发布时间】:2012-05-01 02:07:30
【问题描述】:

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

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

其中“链接”是指向另一个网站上的图片网址的链接。我知道由于相同的来源政策,我无法真正向其他网站发出请求,但如果我只想检查退货状态,是否有例外情况?

【问题讨论】:

  • 您正在使用 ajax 请求来请求图像?
  • 只是一个图片 URL。例如,类似:link

标签: jquery ajax


【解决方案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);
      });
}

【讨论】:

    【解决方案2】:

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

    你应该可以做这样的事情:

    http://jsfiddle.net/GL9eU/

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

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2012-02-20
      • 2011-07-28
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 2012-08-11
      相关资源
      最近更新 更多