【问题标题】:jQuery check external linkjQuery检查外部链接
【发布时间】:2012-02-08 09:10:01
【问题描述】:

使用 Javascript 或 jQuery,我如何检查外部链接是否可用?

$.ajax() 调用不可用,因为它违反了SOP(与here 相同的问题)。我已经阅读了JSONP,但我想知道是否有更直接的解决方案,因为我不想从外部服务器加载任何数据;我只需要检查它是否可以访问。


编辑(答案)

我用下面的代码解决了:

$.ajax({url: 'http://www.example.com',
        type: 'GET',
        dataType: 'jsonp',
        complete: function(jqXHR, textStatus) {
                console.log(jqXHR.status);  // '200' = url reachable
        },
        timeout: 2000
});

现在唯一的问题是我得到了Parse error,但无论如何都可以检查外部链接是否有效。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

您可以使用YQL 通过其 JSONP 接口检查 URL 是否可用。

YQL Console.

【讨论】:

  • 如果我理解得很好,要使用 YQL,我需要对“query.yahooapis.com...”之类的外部链接进行 GET 调用。这会给我同样的问题,因为我无法使用 Javascript 接收外部数据。可能是我没看懂……是不是漏了什么?
  • @Pablo 是的,你是。对 JSONP 进行一些研究,并将其与 YQL 响应一起使用。
  • 最后,我以另一种方式解决了它,但您的回答帮助我知道从哪里开始。
【解决方案2】:

您可以访问服务器端语言吗?您可以使用 AJAX 调用本地文件,该文件使用 PHP 之类的东西来检查外部地址。

如果您需要有关 PHP 部分的帮助,请查看 http://www.catswhocode.com/blog/amazing-things-to-do-with-php-and-curl

【讨论】:

  • 不幸的是没有...我需要用javascript(或jQuery)来做
【解决方案3】:

是的,在支持 Flash 的浏览器中,您可以使用 this 插件。它具有与原生 xhr 相同的 api。此外,如果浏览器中没有 Flash 插件,您仍然可以访问其他域。在某些浏览器中,如果您的目标域响应具有以下标头,则不会出现错误。

Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, *

将 * 替换为适当的域。

仅当您控制第二个域时,上述所有技术才适用。如果没有,那么您必须使用 Jleagle 所说的代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 2011-01-23
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多