2011-04-15 47 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

相關問題