2010-01-22 66 views
1

在客户端使用jQuery,我想知道我是否可以检查链接URL是否有效(即不返回404)。这个链接指向另一个域,所以如果我只使用$ .get(),那么我最终会遇到一个权限问题。我记得阅读了一些关于使用JSONP请求的内容,但我不记得。使用jQuery检查另一个域上的URL是否为404?

回答

4

我发现,似乎(YQL使用)工作的解决方案:

$.getJSON("http://query.yahooapis.com/v1/public/yql?"+ 
      "q=select%20*%20from%20html%20where%20url%3D%22"+ 
      encodeURIComponent(url)+ 
      "%22&format=xml'&callback=?", 
    function(data){ 
     if(data.results[0]){ 
     // do whatever 
     } 
    } 
); 

假设您想要查询的网址是在变量“网址”。

+0

来自http://api.jquery.com/jQuery.getJSON/的文档: 如果指定的URL位于远程服务器上,请将该请求视为JSONP。有关更多详细信息,请参阅$ .ajax()中关于jsonp数据类型的讨论。 – 2010-01-22 19:10:58

+0

@TahirAkhtar这是使用JSONP来要求雅虎去检查你是否存在页面。这就像其他人所建议的本地代理解决方案,但使用第三方代理(雅虎),而不是本地代理。 – rjmunro 2012-03-26 10:47:37

+0

啊,非常感谢!你为我节省了很多工作!这有助于我制作一个脚本来检查另一个网站上的URL是否已经死亡。 – 2012-04-04 23:47:48

1

如果您要调用的服务器可以返回JSONP格式的响应,那么JSONP将起作用。这基本上意味着一个脚本在加载后在页面上调用回调函数。 请参阅http://en.wikipedia.org/wiki/JSON#JSONP

在您的情况下,除非其他站点愿意合作或您在自己的站点上有代理脚本,否则它将不起作用。

如果您希望您的脚本与不受您控制的网站一起使用,那么最好的办法是使用代理或iframe黑客。

0

您无法向其他域请求这样的请求。这是浏览器中的一项安全功能。你可能不得不尝试在iframe或其他东西中做某些事情并检查它。

0

JSONP不会做你多......

你应该做的是使用你喜欢的语言的服务器会简单地装载您传递给它的URL并返回响应代码上轻松创建一个本地代理。然后,使用jquery ajax加载您想要测试的url的代理页面。

+0

不幸的是我没有选择本地代理(我只在服务器上有一些自定义选项 - 一些自定义的HTML地方,我可以加载JavaScript)。 – 2010-01-23 14:31:45