2011-03-16 37 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

相關問題