2011-03-16 55 views
7

使用.load()(或任何jQuery ajax函数)从我的域上的任何位置请求数据都可以正常工作。如何使用.load()从另一个域获取内容?

尝试访问不同域中的URL不起作用。你怎么做呢?另一个领域也恰好是我的。

我读到了关于你可以用PHP做的一个技巧,并制作一个获取内容的代理,然后你在服务器上的php位置上使用jQuery的ajax函数,但是仍然在你自己的服务器上使用jQuery ajax,不算。

有没有好的插件?

编辑:我发现了一个非常不错的jQuery插件,允许您使用任何jQuery函数从其他页面请求内容,就像您在自己的域中使用正常的ajax请求一样。

的职位:http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

插件:https://github.com/jamespadolsey/jQuery-Plugins/tree/master/cross-domain-ajax/

回答

10

这是因为跨域策略,其中,在排序,意味着使用客户端脚本(又称JavaScript ...)您无法从其他域请求数据。对我们来说幸运的是,这个限制在大多数服务器端脚本中都不存在。

所以......

的Javascript:

$("#google-html").load("google-html.php"); 

PHP在 “谷歌html.php”:

echo file_get_contents("http://www.google.com/"); 

会工作。

+0

只要对此没有限制,许多共享托管服务都会禁用此功能。如果这是你的情况,你可能想看看使用Curl http://curl.haxx.se/ – 2011-03-16 02:57:14

+0

诚然,我认为是使用更好的付费托管服务之一。 – mattsven 2011-03-16 02:58:18

+0

更好的付费托管服务禁用'allow_url_fopen'。这对安全性更好。 – 2011-03-16 03:03:06

3

就您的浏览器而言,不同的域=不同的服务器。使用JSONP来执行请求或使用PHP进行代理。您可以使用jQuery.ajax()来执行跨域JSONP请求。

3

一个非常简单的解决方法是使用雅虎的YQL服务,该服务可以从任何外部网站检索内容。

我已经在下面这个仅使用JavaScript和YQL的例子之后的几个网站上成功完成了这项工作。 http://icant.co.uk/articles/crossdomain-ajax-with-jquery/using-yql.html

本示例是博客文章的一部分,其中还概述了其他一些解决方案。 http://www.wait-till-i.com/2010/01/10/loading-external-content-with-ajax-using-jquery-and-yql/

+0

谢谢,我在上面编辑的引用的插件实际上使用了:D – trusktr 2011-03-16 03:07:45

1

我知道另一个可行的解决方案。 它不需要你改变JQuery。它确实需要你可以在你的域名中站起来一个ASP页面。我自己也使用过这种方法。

1)此页http://www.itbsllc.com/zip/proxyscripts.html

2创建像一个proxy.asp页),那么你可以做一个jQuery负载功能和喂养它proxy.asp?URL = ....... 有一个关于如何格式化该链接的例子。 无论如何,您将外部网页网址和您所需的MIME类型作为获取变量提供给您的本地proxy.asp页面。我使用的两种MIME类型是text/html和image/jpg。

请注意,如果您的目标网页包含具有相对来源链接的图片,那么这些图片可能无法加载。 我希望这可以帮助。

+0

感谢您的回答! – trusktr 2013-01-29 03:18:36

相关问题