2011-04-15 44 views
0

我只是简单地想要加载谷歌,在一个使用锚点标签点击功能的股利。但我收到此错误:无法加载http://www.google.co.uk/。起源http:// localhost是不允许的访问控制 - 允许 - 起源

cannot load http://www.google.co.uk/. Origin http://localhost is not allowed by Access-Control-Allow-Origin. 

我试图访问这样说:

$(".someclass").load("http://www.google.co.uk"); 

我知道跨域限制,但有什么办法做到这一点? 我也试过jQuery的ajax功能。但没有成功。 一些建议请。

回答

0

您的服务器上需要代理脚本。从前端调用该代理脚本,以便有效地回拨原始服务器。 $('.someclass').load('proxy.php?url = http://www.google.co.uk'); $('.omes')。

服务器端代理然后获取请求的url并将其返回到前端。

确保将白名单列出,以便脚本无法被利用。而不是在前端和代理脚本之间传递真实的URL,请使用逻辑键。

$('。someclass')。load('proxy.php?page = google_uk');

在您的代理脚本中,请求google_uk时请致电http://www,google.co.uk。如果有人试图通过传递URL或无效密钥来利用您的脚本,您可以返回403 http错误代码(未授权)。

如果您只需要在网页的某一部分,这是很好的知道,负载方法也接受一个CSS选择器这样的:(”。SomeClass的‘)

$负载(’proxy.php? page = google_uk div#search_form');

希望这会有所帮助!

+0

好的。但是proxy.php中应该有什么。我的意思是我应该如何编码。是否有任何特殊的编码涉及它? – Maverick 2011-04-15 14:07:23

+1

没有什么特别的。它向请求的url(或逻辑键)发送一个http请求,并将结果返回给前端。我没有提供代码,因为我没有提供与您合作的服务器环境。您可以在PHP中使用cUrl,如下所述:http://php.net/manual/en/book.curl.php。 – 2011-04-15 14:27:06

2

由于same origin policy,您无法加载Google。

要进行XHR呼叫,协议,域和端口必须匹配。

如果您对http://bla.example.com,你可以改变你的域名是这样的...

document.domain = 'example.com'; 

要解决它,你可以代理的数据服务器端或使用YQL

+0

我没有明白你的观点。你的意思是说..要求访问谷歌是从同一个来源,这是它不加载!? – Maverick 2011-04-15 13:57:37

+1

@mad什么意思?我只是简单说明了浏览器遵循的沙箱,特别是您正在触及的限制。然后我提出了两种可能的解决方法。 – alex 2011-04-15 13:58:43

相关问题