2012-02-08 89 views
2

使用JavaScript或jQuery的,我怎么能检查,如果一个外部链接可用?jQuery的检查外部链接

$.ajax()呼叫不可用,因为它违反SOP(与here相同的问题)。我看了一下JSONP,但我想知道是否有一个更直接的解决方案,因为我不希望加载从外部服务器中的任何数据;我需要的只是检查它是否可达。


EDIT(回答)

我解决了它与下面的代码:

$.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,但在任何情况下,它可如果检查外部链接正在工作。

+0

它似乎对你有帮助:http://stackoverflow.com/questions/635231/javascript-checking-if-page-is-valid – ParPar 2012-02-08 09:32:19

回答

2

你可以使用YQL检查网址是否通过其JSONP接口可用。

YQL Console

+0

如果我理解的很好,要使用YQL,我需要对外部链接进行GET调用,例如'http://query.yahooapis.com/...'。这会给我同样的问题,因为我无法使用Javascript接收外部数据。也许我还没有明白......我错过了什么吗? – Pablo 2012-02-08 09:29:01

+0

@Pablo是的,你是。对JSONP进行一些研究,并将其用于YQL响应。 – alex 2012-02-08 09:30:26

+0

最后,我解决了另一种方式,但你的答案帮助我知道从哪里开始。 – Pablo 2012-02-09 07:28:23

1

是,在支持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说。