如何使用.load()从其他域获取内容?

时间:2011-03-16 02:48:58

标签: javascript jquery ajax cross-domain

使用.load()(或任何jQuery ajax函数)从我的域上的任何位置请求数据都可以正常工作。

尝试访问其他域中的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/

4 个答案:

答案 0 :(得分:10)

这是因为跨域策略,在排序中,意味着使用客户端脚本(a.k.a.javascript ...),您无法从其他域请求数据。幸运的是,大多数服务器端脚本都不存在此限制。

因此...

使用Javascript:

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

PHP中的“google-html.php”:

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

会起作用。

答案 1 :(得分:3)

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

答案 2 :(得分:3)

一个非常简单的解决方法是使用Yahoo的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/

答案 3 :(得分:1)

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

1)创建一个proxy.asp页面,就像本页http://www.itbsllc.com/zip/proxyscripts.html

一样

2)然后,您可以执行JQuery加载功能并将其提供给proxy.asp?url = ....... 有一个关于如何格式化它的链接的例子。 无论如何,您将外部页面URL和所需的mime类型作为get变量提供给本地proxy.asp页面。我使用的两种mime类型是text / html和image / jpg。

注意,如果目标页面包含具有相对源链接的图像,则可能无法加载。 我希望这会有所帮助。